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:
b55e7b5
)
putMVar and takeMVar: add write_barrier() to fix race with throwTo
author
Simon Marlow
<marlowsd@gmail.com>
Wed, 7 Jan 2009 11:20:26 +0000
(11:20 +0000)
committer
Simon Marlow
<marlowsd@gmail.com>
Wed, 7 Jan 2009 11:20:26 +0000
(11:20 +0000)
rts/PrimOps.cmm
patch
|
blob
|
history
diff --git
a/rts/PrimOps.cmm
b/rts/PrimOps.cmm
index
40948a3
..
dc60ff2
100644
(file)
--- a/
rts/PrimOps.cmm
+++ b/
rts/PrimOps.cmm
@@
-1651,8
+1651,11
@@
takeMVarzh_fast
CurrentTSO) [];
}
StgTSO__link(CurrentTSO) = stg_END_TSO_QUEUE_closure;
CurrentTSO) [];
}
StgTSO__link(CurrentTSO) = stg_END_TSO_QUEUE_closure;
- StgTSO_why_blocked(CurrentTSO) = BlockedOnMVar::I16;
StgTSO_block_info(CurrentTSO) = mvar;
StgTSO_block_info(CurrentTSO) = mvar;
+ // write barrier for throwTo(), which looks at block_info
+ // if why_blocked==BlockedOnMVar.
+ prim %write_barrier() [];
+ StgTSO_why_blocked(CurrentTSO) = BlockedOnMVar::I16;
StgMVar_tail(mvar) = CurrentTSO;
R1 = mvar;
StgMVar_tail(mvar) = CurrentTSO;
R1 = mvar;
@@
-1808,8
+1811,11
@@
putMVarzh_fast
CurrentTSO) [];
}
StgTSO__link(CurrentTSO) = stg_END_TSO_QUEUE_closure;
CurrentTSO) [];
}
StgTSO__link(CurrentTSO) = stg_END_TSO_QUEUE_closure;
- StgTSO_why_blocked(CurrentTSO) = BlockedOnMVar::I16;
StgTSO_block_info(CurrentTSO) = mvar;
StgTSO_block_info(CurrentTSO) = mvar;
+ // write barrier for throwTo(), which looks at block_info
+ // if why_blocked==BlockedOnMVar.
+ prim %write_barrier() [];
+ StgTSO_why_blocked(CurrentTSO) = BlockedOnMVar::I16;
StgMVar_tail(mvar) = CurrentTSO;
R1 = mvar;
StgMVar_tail(mvar) = CurrentTSO;
R1 = mvar;