From 75927bb04bccb3ada850641939f0842a4168968a Mon Sep 17 00:00:00 2001 From: "simonmar@microsoft.com" Date: Thu, 28 Feb 2008 15:24:03 +0000 Subject: [PATCH] scavengeTSO might encounter a ThreadRelocated; cope --- rts/sm/Scav.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/rts/sm/Scav.c b/rts/sm/Scav.c index 1640edd..9361fb7 100644 --- a/rts/sm/Scav.c +++ b/rts/sm/Scav.c @@ -134,8 +134,17 @@ scavenge_fun_srt(const StgInfoTable *info) static void scavengeTSO (StgTSO *tso) { - rtsBool saved_eager = gct->eager_promotion; + rtsBool saved_eager; + + if (tso->what_next == ThreadRelocated) { + // the only way this can happen is if the old TSO was on the + // mutable list. We might have other links to this defunct + // TSO, so we must update its link field. + evacuate((StgClosure**)&tso->_link); + return; + } + saved_eager = gct->eager_promotion; gct->eager_promotion = rtsFalse; if ( tso->why_blocked == BlockedOnMVar -- 1.7.10.4