@@ -45,7 +45,7 @@ static t_linked_rt_edge* rt_edge_free_list = nullptr;
45
45
46
46
static t_rt_node* alloc_rt_node ();
47
47
48
- static void free_rt_node (t_rt_node* rt_node);
48
+ static void free_rt_node (t_rt_node** rt_node);
49
49
50
50
static t_linked_rt_edge* alloc_linked_rt_edge ();
51
51
@@ -144,11 +144,12 @@ alloc_rt_node() {
144
144
return (rt_node);
145
145
}
146
146
147
- static void free_rt_node (t_rt_node* rt_node) {
147
+ static void free_rt_node (t_rt_node** rt_node) {
148
148
/* Adds rt_node to the proper free list. */
149
149
150
- rt_node->u .next = rt_node_free_list;
151
- rt_node_free_list = rt_node;
150
+ (*rt_node)->u .next = rt_node_free_list;
151
+ rt_node_free_list = (*rt_node);
152
+ (*rt_node) = nullptr ;
152
153
}
153
154
154
155
static t_linked_rt_edge*
@@ -660,7 +661,9 @@ bool verify_route_tree_recurr(t_rt_node* node, std::set<int>& seen_nodes) {
660
661
void free_route_tree (t_rt_node* rt_node) {
661
662
/* Puts the rt_nodes and edges in the tree rooted at rt_node back on the
662
663
* free lists. Recursive, depth-first post-order traversal. */
663
-
664
+ if (rt_node == nullptr ) {
665
+ return ;
666
+ }
664
667
t_linked_rt_edge *rt_edge, *next_edge;
665
668
666
669
rt_edge = rt_node->u .child_list ;
@@ -677,7 +680,7 @@ void free_route_tree(t_rt_node* rt_node) {
677
680
rr_node_to_rt_node.at (rt_node->inode ) = nullptr ;
678
681
}
679
682
680
- free_rt_node (rt_node);
683
+ free_rt_node (& rt_node);
681
684
}
682
685
683
686
void print_route_tree (const t_rt_node* rt_node) {
@@ -1056,7 +1059,7 @@ static t_rt_node* prune_route_tree_recurr(t_rt_node* node, CBRR& connections_inf
1056
1059
// Record as not reached
1057
1060
connections_inf.toreach_rr_sink (node->net_pin_index );
1058
1061
1059
- free_rt_node (node);
1062
+ free_rt_node (& node);
1060
1063
return nullptr ; // Pruned
1061
1064
}
1062
1065
} else if (all_children_pruned) {
@@ -1102,7 +1105,7 @@ static t_rt_node* prune_route_tree_recurr(t_rt_node* node, CBRR& connections_inf
1102
1105
if (reached_non_configurably && !force_prune) {
1103
1106
return node; // Not pruned
1104
1107
} else {
1105
- free_rt_node (node);
1108
+ free_rt_node (& node);
1106
1109
return nullptr ; // Pruned
1107
1110
}
1108
1111
0 commit comments