removeThreadFromQueue: stub out the link field before returning (#4813)
authorSimon Marlow <marlowsd@gmail.com>
Thu, 2 Dec 2010 16:08:38 +0000 (16:08 +0000)
committerSimon Marlow <marlowsd@gmail.com>
Thu, 2 Dec 2010 16:08:38 +0000 (16:08 +0000)
rts/Threads.c

index 0dee734..f6b1bac 100644 (file)
@@ -163,9 +163,11 @@ removeThreadFromQueue (Capability *cap, StgTSO **queue, StgTSO *tso)
        if (t == tso) {
            if (prev) {
                setTSOLink(cap,prev,t->_link);
        if (t == tso) {
            if (prev) {
                setTSOLink(cap,prev,t->_link);
+                t->_link = END_TSO_QUEUE;
                 return rtsFalse;
            } else {
                *queue = t->_link;
                 return rtsFalse;
            } else {
                *queue = t->_link;
+                t->_link = END_TSO_QUEUE;
                 return rtsTrue;
            }
        }
                 return rtsTrue;
            }
        }
@@ -190,7 +192,8 @@ removeThreadFromDeQueue (Capability *cap,
                *head = t->_link;
                 flag = rtsTrue;
            }
                *head = t->_link;
                 flag = rtsTrue;
            }
-           if (*tail == tso) {
+            t->_link = END_TSO_QUEUE;
+            if (*tail == tso) {
                if (prev) {
                    *tail = prev;
                } else {
                if (prev) {
                    *tail = prev;
                } else {