summaryrefslogtreecommitdiff
path: root/lib/graph.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/graph.c')
-rw-r--r--lib/graph.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/lib/graph.c b/lib/graph.c
index a46f71449d..891851b301 100644
--- a/lib/graph.c
+++ b/lib/graph.c
@@ -59,8 +59,10 @@ graph_delete_node (struct graph *graph, struct graph_node *node)
vector_unset (adj->to, j);
// if the node is orphaned, delete it
- if (vector_active (adj->to) == 0 && vector_active (adj->from) == 0)
- graph_delete_node (adj);
+ if (vector_active (adj->to) == 0 &&
+ vector_active (adj->from) == 0 &&
+ adj != node)
+ graph_delete_node (adj);
}
// for all nodes that we have an edge to, remove us from their ->from
@@ -72,8 +74,10 @@ graph_delete_node (struct graph *graph, struct graph_node *node)
vector_unset (adj->from, j);
// if the node is orphaned, delete it
- if (vector_active (adj->to) == 0 && vector_active (adj->from) == 0)
- graph_delete_node (adj);
+ if (vector_active (adj->to) == 0 &&
+ vector_active (adj->from) == 0 &&
+ adj != node)
+ graph_delete_node (adj);
}
// if there is a deletion callback, call it!