From 7408b39235bccdcde48df2a73337ff976fbc09b7 Mon Sep 17 00:00:00 2001 From: Simon Marlow Date: Thu, 11 Mar 2010 09:57:44 +0000 Subject: Use message-passing to implement throwTo in the RTS This replaces some complicated locking schemes with message-passing in the implementation of throwTo. The benefits are - previously it was impossible to guarantee that a throwTo from a thread running on one CPU to a thread running on another CPU would be noticed, and we had to rely on the GC to pick up these forgotten exceptions. This no longer happens. - the locking regime is simpler (though the code is about the same size) - threads can be unblocked from a blocked_exceptions queue without having to traverse the whole queue now. It's a rare case, but replaces an O(n) operation with an O(1). - generally we move in the direction of sharing less between Capabilities (aka HECs), which will become important with other changes we have planned. Also in this patch I replaced several STM-specific closure types with a generic MUT_PRIM closure type, which allowed a lot of code in the GC and other places to go away, hence the line-count reduction. The message-passing changes resulted in about a net zero line-count difference. --- rts/Printer.c | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) (limited to 'rts/Printer.c') diff --git a/rts/Printer.c b/rts/Printer.c index 1b8a6dd2c6..e9813299d8 100644 --- a/rts/Printer.c +++ b/rts/Printer.c @@ -160,6 +160,12 @@ printClosure( StgClosure *obj ) printStdObjPayload(obj); break; + case PRIM: + debugBelch("PRIM("); + printPtr((StgPtr)obj->header.info); + printStdObjPayload(obj); + break; + case THUNK: case THUNK_1_0: case THUNK_0_1: case THUNK_1_1: case THUNK_0_2: case THUNK_2_0: @@ -356,10 +362,6 @@ printClosure( StgClosure *obj ) /* ToDo: chase 'link' ? */ break; - case STABLE_NAME: - debugBelch("STABLE_NAME(%lu)\n", (lnat)((StgStableName*)obj)->sn); - break; - case TSO: debugBelch("TSO("); debugBelch("%lu (%p)",(unsigned long)(((StgTSO*)obj)->id), (StgTSO*)obj); @@ -1132,14 +1134,10 @@ char *closure_type_names[] = { [MUT_VAR_CLEAN] = "MUT_VAR_CLEAN", [MUT_VAR_DIRTY] = "MUT_VAR_DIRTY", [WEAK] = "WEAK", - [STABLE_NAME] = "STABLE_NAME", + [PRIM] = "PRIM", + [MUT_PRIM] = "MUT_PRIM", [TSO] = "TSO", - [TVAR_WATCH_QUEUE] = "TVAR_WATCH_QUEUE", - [INVARIANT_CHECK_QUEUE] = "INVARIANT_CHECK_QUEUE", - [ATOMIC_INVARIANT] = "ATOMIC_INVARIANT", - [TVAR] = "TVAR", [TREC_CHUNK] = "TREC_CHUNK", - [TREC_HEADER] = "TREC_HEADER", [ATOMICALLY_FRAME] = "ATOMICALLY_FRAME", [CATCH_RETRY_FRAME] = "CATCH_RETRY_FRAME", [CATCH_STM_FRAME] = "CATCH_STM_FRAME", -- cgit v1.2.1