View | Details | Raw Unified | Return to bug 239672 | Differences between
and this patch

Collapse All | Expand All

(-)sys/gnu/gcov/gcov_fs.c (-4 / +10 lines)
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

Return to bug 239672