diff options
author | Antoine Brodin <antoine@FreeBSD.org> | 2014-03-23 18:14:05 +0400 |
---|---|---|
committer | Antoine Brodin <antoine@FreeBSD.org> | 2014-03-23 18:14:05 +0400 |
commit | 2b54eee76c8800fd2846dd1df5d9d3908f89d76b (patch) | |
tree | 60974077c751192651185e1af49112a43608b1e1 /src/libexec | |
parent | 9990a3a02e32b254a553a4c738ade1f3be06022f (diff) |
To calculate the depth, when removing a node, give a depth of at least the depth of the removed node + 1 to the connected nodes
Diffstat (limited to 'src/libexec')
-rw-r--r-- | src/libexec/poudriere/tsort/tsort.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/src/libexec/poudriere/tsort/tsort.c b/src/libexec/poudriere/tsort/tsort.c index b1ec2a2a..8995583f 100644 --- a/src/libexec/poudriere/tsort/tsort.c +++ b/src/libexec/poudriere/tsort/tsort.c @@ -303,9 +303,8 @@ static void tsort(void) { NODE *n, *next; - int cnt, depth, i; + int cnt, i; - depth = 0; while (graph != NULL) { /* * Keep getting rid of simple cases until there are none left, @@ -316,12 +315,10 @@ tsort(void) for (cnt = 0, n = graph; n != NULL; n = next) { next = n->n_next; if (n->n_refcnt == 0) { - n->n_depth = depth; remove_node(n); ++cnt; } } - ++depth; } while (graph != NULL && cnt); if (graph == NULL) @@ -374,8 +371,11 @@ remove_node(NODE *n) if (print_depth) (void)printf("%d ", n->n_depth); (void)printf("%s\n", n->n_name); - for (np = n->n_arcs, i = n->n_narcs; --i >= 0; np++) + for (np = n->n_arcs, i = n->n_narcs; --i >= 0; np++) { + if ((*np)->n_depth < n->n_depth + 1) + (*np)->n_depth = n->n_depth + 1; --(*np)->n_refcnt; + } n->n_narcs = 0; *n->n_prevp = n->n_next; if (n->n_next) |