Lines 185-190
Link Here
|
185 |
* @entry: list entry for parent's child node list |
185 |
* @entry: list entry for parent's child node list |
186 |
* @children: child nodes |
186 |
* @children: child nodes |
187 |
* @all_entry: list entry for list of all nodes |
187 |
* @all_entry: list entry for list of all nodes |
|
|
188 |
* @remove_entry: tail queue entry for marked to be removed nodes |
188 |
* @parent: parent node |
189 |
* @parent: parent node |
189 |
* @loaded_info: array of pointers to profiling data sets for loaded object |
190 |
* @loaded_info: array of pointers to profiling data sets for loaded object |
190 |
* files. |
191 |
* files. |
Lines 203-208
Link Here
|
203 |
struct gcov_node { |
204 |
struct gcov_node { |
204 |
LIST_ENTRY(gcov_node) children_entry; |
205 |
LIST_ENTRY(gcov_node) children_entry; |
205 |
LIST_ENTRY(gcov_node) all_entry; |
206 |
LIST_ENTRY(gcov_node) all_entry; |
|
|
207 |
TAILQ_ENTRY(gcov_node) remove_entry; |
206 |
struct { |
208 |
struct { |
207 |
struct gcov_node *lh_first; |
209 |
struct gcov_node *lh_first; |
208 |
} children; |
210 |
} children; |
Lines 420-437
Link Here
|
420 |
void |
422 |
void |
421 |
gcov_stats_reset(void) |
423 |
gcov_stats_reset(void) |
422 |
{ |
424 |
{ |
423 |
struct gcov_node *node; |
425 |
struct gcov_node *node, *node_temp; |
|
|
426 |
TAILQ_HEAD(, gcov_node) remove_head = |
427 |
TAILQ_HEAD_INITIALIZER(remove_head); |
424 |
|
428 |
|
425 |
mtx_lock(&node_lock); |
429 |
mtx_lock(&node_lock); |
426 |
restart: |
|
|
427 |
LIST_FOREACH(node, &all_head, all_entry) { |
430 |
LIST_FOREACH(node, &all_head, all_entry) { |
428 |
if (node->num_loaded > 0) |
431 |
if (node->num_loaded > 0) |
429 |
reset_node(node); |
432 |
reset_node(node); |
430 |
else if (LIST_EMPTY(&node->children)) { |
433 |
else if (LIST_EMPTY(&node->children)) { |
431 |
remove_node(node); |
434 |
TAILQ_INSERT_TAIL(&remove_head, node, remove_entry); |
432 |
goto restart; |
|
|
433 |
} |
435 |
} |
434 |
} |
436 |
} |
|
|
437 |
|
438 |
TAILQ_FOREACH_SAFE(node, &remove_head, remove_entry, node_temp) { |
439 |
remove_node(node); |
440 |
} |
435 |
mtx_unlock(&node_lock); |
441 |
mtx_unlock(&node_lock); |
436 |
} |
442 |
} |
437 |
|
443 |
|