From 5f923aab146d892f019ff1c1627edf20378a3aac Mon Sep 17 00:00:00 2001 From: Simon Marlow Date: Wed, 9 Jul 2008 08:31:28 +0000 Subject: [PATCH] Fix some random register clobbering in takeMVar/putMVar This showed up as a crash in conc032 for me. --- rts/PrimOps.cmm | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/rts/PrimOps.cmm b/rts/PrimOps.cmm index a45439d..e8b216f 100644 --- a/rts/PrimOps.cmm +++ b/rts/PrimOps.cmm @@ -1570,6 +1570,7 @@ takeMVarzh_fast StgTSO_block_info(CurrentTSO) = mvar; StgMVar_tail(mvar) = CurrentTSO; + R1 = mvar; jump stg_block_takemvar; } @@ -1697,13 +1698,14 @@ tryTakeMVarzh_fast putMVarzh_fast { - W_ mvar, info, tso; + W_ mvar, val, info, tso; /* args: R1 = MVar, R2 = value */ mvar = R1; + val = R2; #if defined(THREADED_RTS) - ("ptr" info) = foreign "C" lockClosure(mvar "ptr") [R2]; + ("ptr" info) = foreign "C" lockClosure(mvar "ptr") []; #else info = GET_INFO(mvar); #endif @@ -1725,6 +1727,8 @@ putMVarzh_fast StgTSO_block_info(CurrentTSO) = mvar; StgMVar_tail(mvar) = CurrentTSO; + R1 = mvar; + R2 = val; jump stg_block_putmvar; } -- 1.7.10.4