Repository : ssh://darcs.haskell.org//srv/darcs/ghc On branch : master
http://hackage.haskell.org/trac/ghc/changeset/3db0254253a20473c774dccdb37e3b79464b5b41 >--------------------------------------------------------------- commit 3db0254253a20473c774dccdb37e3b79464b5b41 Author: Geoffrey Mainland <[email protected]> Date: Mon Oct 29 17:32:10 2012 +0000 Save and restore registers across calls to unlockClosure. We may not assume that registers are saved across calls to unlockClosure because it could call a C function on some platforms. >--------------------------------------------------------------- rts/HeapStackCheck.cmm | 13 +++++++++++++ 1 files changed, 13 insertions(+), 0 deletions(-) diff --git a/rts/HeapStackCheck.cmm b/rts/HeapStackCheck.cmm index 4fd4430..b3ae264 100644 --- a/rts/HeapStackCheck.cmm +++ b/rts/HeapStackCheck.cmm @@ -509,7 +509,12 @@ INFO_TABLE_RET ( stg_block_takemvar, RET_SMALL, W_ info_ptr, P_ mvar ) // code fragment executed just before we return to the scheduler stg_block_takemvar_finally { + W_ r1, r3; + r1 = R1; + r3 = R3; unlockClosure(R3, stg_MVAR_DIRTY_info); + R1 = r1; + R3 = r3; jump StgReturn [R1]; } @@ -532,7 +537,12 @@ INFO_TABLE_RET( stg_block_putmvar, RET_SMALL, W_ info_ptr, // code fragment executed just before we return to the scheduler stg_block_putmvar_finally { + W_ r1, r3; + r1 = R1; + r3 = R3; unlockClosure(R3, stg_MVAR_DIRTY_info); + R1 = r1; + R3 = r3; jump StgReturn [R1]; } @@ -565,7 +575,10 @@ stg_block_throwto_finally // unlocked. It may have been unlocked if we revoked the message // due to an exception being raised during threadPaused(). if (StgHeader_info(StgTSO_block_info(CurrentTSO)) == stg_WHITEHOLE_info) { + W_ r1; + r1 = R1; unlockClosure(StgTSO_block_info(CurrentTSO), stg_MSG_THROWTO_info); + R1 = r1; } jump StgReturn [R1]; } _______________________________________________ Cvs-ghc mailing list [email protected] http://www.haskell.org/mailman/listinfo/cvs-ghc
