summary refs log tree commit diff
diff options
context:
space:
mode:
authorChristian Neukirchen <chneukirchen@gmail.com>2016-07-20 12:58:30 +0200
committerChristian Neukirchen <chneukirchen@gmail.com>2016-07-20 13:01:50 +0200
commit7ef4bf389191ffb3f8f80f4062fcdf45c6047ed2 (patch)
tree6932e1ba3cc9c5eaeb413b667fee11504d19aae8
parentdd40aabd81470c10ba9a47377b1f011a519be15a (diff)
downloadmblaze-7ef4bf389191ffb3f8f80f4062fcdf45c6047ed2.tar.gz
mblaze-7ef4bf389191ffb3f8f80f4062fcdf45c6047ed2.tar.xz
mblaze-7ef4bf389191ffb3f8f80f4062fcdf45c6047ed2.zip
thread: fix some more loops
-rw-r--r--thread.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/thread.c b/thread.c
index d135c34..8aa0efd 100644
--- a/thread.c
+++ b/thread.c
@@ -188,21 +188,24 @@ out:
 			// if we already have a wrong parent, orphan us first
 
 			if (c->parent->child == c)   // first in list
-				c->parent->child = c->next;
+				c->parent->child = c->parent->child->next;
 			for (r = c->parent->child; r; r = r->next) {
 				if (r->next == c)
 					r->next = c->next;
 			}
+
+			c->next = 0;
 		}
 
 		c->parent = parent;
 
 		// add at the end
-		for (r = parent->child; r && r->next; r = r->next)
-			;
-		if (!r) {
+		if (!parent->child) {
 			parent->child = c;
 		} else {
+			for (r = parent->child; r && r->next; r = r->next)
+				if (r == c)
+					goto out2;
 			r->next = c;
 			c->next = 0;
 		}