Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/freebsd/poudriere.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAntoine Brodin <antoine@FreeBSD.org>2014-03-23 18:14:05 +0400
committerAntoine Brodin <antoine@FreeBSD.org>2014-03-23 18:14:05 +0400
commit2b54eee76c8800fd2846dd1df5d9d3908f89d76b (patch)
tree60974077c751192651185e1af49112a43608b1e1 /src/libexec
parent9990a3a02e32b254a553a4c738ade1f3be06022f (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.c10
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)