X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fincludes%2FSTM.h;h=4c2b109f73ab33923ced896c9a47fe1335656238;hb=eba7b660a36878cd8d926845807913d7ec5734c9;hp=0db5185ecfac8f779bc06d8414f565f77516458a;hpb=ab3d1f285cef784138d99e70f7359ea6e67f6c25;p=ghc-hetmet.git diff --git a/ghc/includes/STM.h b/ghc/includes/STM.h index 0db5185..4c2b109 100644 --- a/ghc/includes/STM.h +++ b/ghc/includes/STM.h @@ -33,7 +33,7 @@ #ifndef STM_H #define STM_H -#ifdef SMP +#ifdef THREADED_RTS //#define STM_CG_LOCK #define STM_FG_LOCKS #else @@ -46,13 +46,10 @@ extern "C" { /*---------------------------------------------------------------------- - Start of day - ------------ - + GC interaction + -------------- */ -extern void initSTM(void); - extern void stmPreGCHook(void); /*---------------------------------------------------------------------- @@ -64,8 +61,8 @@ extern void stmPreGCHook(void); /* Create and enter a new transaction context */ -extern StgTRecHeader *stmStartTransaction(StgRegTable *reg, StgTRecHeader *outer); -extern StgTRecHeader *stmStartNestedTransaction(StgRegTable *reg, StgTRecHeader *outer +extern StgTRecHeader *stmStartTransaction(Capability *cap, StgTRecHeader *outer); +extern StgTRecHeader *stmStartNestedTransaction(Capability *cap, StgTRecHeader *outer ); /* @@ -76,7 +73,7 @@ extern StgTRecHeader *stmStartNestedTransaction(StgRegTable *reg, StgTRecHeader * transaction contexts doomed to abort. */ -extern void stmAbortTransaction(StgTRecHeader *trec); +extern void stmAbortTransaction(Capability *cap, StgTRecHeader *trec); /* * Ensure that a subsequent commit / validation will fail. We use this @@ -87,7 +84,7 @@ extern void stmAbortTransaction(StgTRecHeader *trec); * in case other threads' updates make it valid in the mean time. */ -extern void stmCondemnTransaction(StgTRecHeader *trec); +extern void stmCondemnTransaction(Capability *cap, StgTRecHeader *trec); /* * Return the trec within which the specified trec was created (not @@ -158,20 +155,22 @@ extern StgBool stmValidateNestOfTransactions(StgTRecHeader *trec); * been committed to. */ -extern StgBool stmCommitTransaction(StgRegTable *reg, StgTRecHeader *trec); -extern StgBool stmCommitNestedTransaction(StgRegTable *reg, StgTRecHeader *trec); +extern StgBool stmCommitTransaction(Capability *cap, StgTRecHeader *trec); +extern StgBool stmCommitNestedTransaction(Capability *cap, StgTRecHeader *trec); /* * Test whether the current transaction context is valid and, if so, * start the thread waiting for updates to any of the tvars it has * ready from and mark it as blocked. It is an error to call stmWait - * if the thread is already waiting. + * if the thread is already waiting. */ -extern StgBool stmWait(StgRegTable *reg, +extern StgBool stmWait(Capability *cap, StgTSO *tso, StgTRecHeader *trec); +extern void stmWaitUnlock(Capability *cap, StgTRecHeader *trec); + /* * Test whether the current transaction context is valid and, if so, * leave the thread waiting and mark it as blocked again. If the @@ -180,7 +179,7 @@ extern StgBool stmWait(StgRegTable *reg, * thread is not waiting. */ -extern StgBool stmReWait(StgTSO *tso); +extern StgBool stmReWait(Capability *cap, StgTSO *tso); /*---------------------------------------------------------------------- @@ -188,7 +187,7 @@ extern StgBool stmReWait(StgTSO *tso); -------------------------- */ -extern StgTVar *stmNewTVar(StgRegTable *reg, +extern StgTVar *stmNewTVar(Capability *cap, StgClosure *new_value); /*---------------------------------------------------------------------- @@ -202,7 +201,7 @@ extern StgTVar *stmNewTVar(StgRegTable *reg, * thread's current transaction. */ -extern StgClosure *stmReadTVar(StgRegTable *reg, +extern StgClosure *stmReadTVar(Capability *cap, StgTRecHeader *trec, StgTVar *tvar); @@ -210,7 +209,7 @@ extern StgClosure *stmReadTVar(StgRegTable *reg, * thread's current transaction. */ -extern void stmWriteTVar(StgRegTable *reg, +extern void stmWriteTVar(Capability *cap, StgTRecHeader *trec, StgTVar *tvar, StgClosure *new_value);