Fix run queue corruption bug, introduced in recent threadWait commit.
This fixes the "memo002 goes off into outer space" bug.
/* -----------------------------------------------------------------------------
/* -----------------------------------------------------------------------------
- * $Id: Schedule.c,v 1.24 1999/08/25 16:11:51 simonmar Exp $
+ * $Id: Schedule.c,v 1.25 1999/09/10 11:11:51 simonmar Exp $
*
* (c) The GHC Team, 1998-1999
*
*
* (c) The GHC Team, 1998-1999
*
ASSERT(tso->why_blocked != NotBlocked);
tso->why_blocked = NotBlocked;
next = tso->link;
ASSERT(tso->why_blocked != NotBlocked);
tso->why_blocked = NotBlocked;
next = tso->link;
+ tso->link = END_TSO_QUEUE;
PUSH_ON_RUN_QUEUE(tso);
IF_DEBUG(scheduler,belch("Waking up thread %ld", tso->id));
return next;
PUSH_ON_RUN_QUEUE(tso);
IF_DEBUG(scheduler,belch("Waking up thread %ld", tso->id));
return next;
/* -----------------------------------------------------------------------------
/* -----------------------------------------------------------------------------
- * $Id: Schedule.h,v 1.6 1999/08/25 16:11:51 simonmar Exp $
+ * $Id: Schedule.h,v 1.7 1999/09/10 11:11:52 simonmar Exp $
*
* (c) The GHC Team 1998-1999
*
*
* (c) The GHC Team 1998-1999
*
#endif
#define END_TSO_QUEUE ((StgTSO *)(void*)&END_TSO_QUEUE_closure)
#endif
#define END_TSO_QUEUE ((StgTSO *)(void*)&END_TSO_QUEUE_closure)
+/* Add a thread to the end of the run queue.
+ * NOTE: tso->link should be END_TSO_QUEUE before calling this macro.
+ */
#define PUSH_ON_RUN_QUEUE(tso) \
if (run_queue_hd == END_TSO_QUEUE) { \
run_queue_hd = tso; \
#define PUSH_ON_RUN_QUEUE(tso) \
if (run_queue_hd == END_TSO_QUEUE) { \
run_queue_hd = tso; \