X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=rts%2FSTM.c;h=f98d201b07696a37d8e72e1ca27c206634db1804;hp=723f77acb6aaa6ae10d81b88f0d8d229612c06ea;hb=5d52d9b64c21dcf77849866584744722f8121389;hpb=a2a67cd520b9841114d69a87a423dabcb3b4368e diff --git a/rts/STM.c b/rts/STM.c index 723f77a..f98d201 100644 --- a/rts/STM.c +++ b/rts/STM.c @@ -352,8 +352,7 @@ static StgBool watcher_is_tso(StgTVarWatchQueue *q) { static StgBool watcher_is_invariant(StgTVarWatchQueue *q) { StgClosure *c = q -> closure; - StgInfoTable *info = get_itbl(c); - return (info -> type) == ATOMIC_INVARIANT; + return (c->header.info == &stg_ATOMIC_INVARIANT_info); } /*......................................................................*/ @@ -378,7 +377,7 @@ static void unpark_tso(Capability *cap, StgTSO *tso) { lockTSO(tso); if (tso -> why_blocked == BlockedOnSTM) { TRACE("unpark_tso on tso=%p", tso); - unblockOne(cap,tso); + tryWakeupThread(cap,tso); } else { TRACE("spurious unpark_tso on tso=%p", tso); } @@ -412,7 +411,7 @@ static void unpark_waiters_on(Capability *cap, StgTVar *s) { static StgInvariantCheckQueue *new_stg_invariant_check_queue(Capability *cap, StgAtomicInvariant *invariant) { StgInvariantCheckQueue *result; - result = (StgInvariantCheckQueue *)allocateLocal(cap, sizeofW(StgInvariantCheckQueue)); + result = (StgInvariantCheckQueue *)allocate(cap, sizeofW(StgInvariantCheckQueue)); SET_HDR (result, &stg_INVARIANT_CHECK_QUEUE_info, CCS_SYSTEM); result -> invariant = invariant; result -> my_execution = NO_TREC; @@ -422,7 +421,7 @@ static StgInvariantCheckQueue *new_stg_invariant_check_queue(Capability *cap, static StgTVarWatchQueue *new_stg_tvar_watch_queue(Capability *cap, StgClosure *closure) { StgTVarWatchQueue *result; - result = (StgTVarWatchQueue *)allocateLocal(cap, sizeofW(StgTVarWatchQueue)); + result = (StgTVarWatchQueue *)allocate(cap, sizeofW(StgTVarWatchQueue)); SET_HDR (result, &stg_TVAR_WATCH_QUEUE_info, CCS_SYSTEM); result -> closure = closure; return result; @@ -430,7 +429,7 @@ static StgTVarWatchQueue *new_stg_tvar_watch_queue(Capability *cap, static StgTRecChunk *new_stg_trec_chunk(Capability *cap) { StgTRecChunk *result; - result = (StgTRecChunk *)allocateLocal(cap, sizeofW(StgTRecChunk)); + result = (StgTRecChunk *)allocate(cap, sizeofW(StgTRecChunk)); SET_HDR (result, &stg_TREC_CHUNK_info, CCS_SYSTEM); result -> prev_chunk = END_STM_CHUNK_LIST; result -> next_entry_idx = 0; @@ -440,7 +439,7 @@ static StgTRecChunk *new_stg_trec_chunk(Capability *cap) { static StgTRecHeader *new_stg_trec_header(Capability *cap, StgTRecHeader *enclosing_trec) { StgTRecHeader *result; - result = (StgTRecHeader *) allocateLocal(cap, sizeofW(StgTRecHeader)); + result = (StgTRecHeader *) allocate(cap, sizeofW(StgTRecHeader)); SET_HDR (result, &stg_TREC_HEADER_info, CCS_SYSTEM); result -> enclosing_trec = enclosing_trec; @@ -1026,16 +1025,6 @@ void stmCondemnTransaction(Capability *cap, /*......................................................................*/ -StgTRecHeader *stmGetEnclosingTRec(StgTRecHeader *trec) { - StgTRecHeader *outer; - TRACE("%p : stmGetEnclosingTRec", trec); - outer = trec -> enclosing_trec; - TRACE("%p : stmGetEnclosingTRec()=%p", trec, outer); - return outer; -} - -/*......................................................................*/ - StgBool stmValidateNestOfTransactions(StgTRecHeader *trec) { StgTRecHeader *t; StgBool result; @@ -1185,7 +1174,7 @@ void stmAddInvariantToCheck(Capability *cap, // 1. Allocate an StgAtomicInvariant, set last_execution to NO_TREC // to signal that this is a new invariant in the current atomic block - invariant = (StgAtomicInvariant *) allocateLocal(cap, sizeofW(StgAtomicInvariant)); + invariant = (StgAtomicInvariant *) allocate(cap, sizeofW(StgAtomicInvariant)); TRACE("%p : stmAddInvariantToCheck allocated invariant=%p", trec, invariant); SET_HDR (invariant, &stg_ATOMIC_INVARIANT_info, CCS_SYSTEM); invariant -> code = code; @@ -1667,7 +1656,7 @@ void stmWriteTVar(Capability *cap, StgTVar *stmNewTVar(Capability *cap, StgClosure *new_value) { StgTVar *result; - result = (StgTVar *)allocateLocal(cap, sizeofW(StgTVar)); + result = (StgTVar *)allocate(cap, sizeofW(StgTVar)); SET_HDR (result, &stg_TVAR_info, CCS_SYSTEM); result -> current_value = new_value; result -> first_watch_queue_entry = END_STM_WATCH_QUEUE;