projects
/
ghc-hetmet.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
65bb9b5
)
scavengeTSO might encounter a ThreadRelocated; cope
author
simonmar@microsoft.com
<unknown>
Thu, 28 Feb 2008 15:24:03 +0000
(15:24 +0000)
committer
simonmar@microsoft.com
<unknown>
Thu, 28 Feb 2008 15:24:03 +0000
(15:24 +0000)
rts/sm/Scav.c
patch
|
blob
|
history
diff --git
a/rts/sm/Scav.c
b/rts/sm/Scav.c
index
1640edd
..
9361fb7
100644
(file)
--- 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)
{
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
gct->eager_promotion = rtsFalse;
if ( tso->why_blocked == BlockedOnMVar