diff options
author | Matthew Pickering <matthewtpickering@gmail.com> | 2022-04-28 15:24:50 +0100 |
---|---|---|
committer | Marge Bot <ben+marge-bot@smart-cactus.org> | 2022-04-28 22:20:10 -0400 |
commit | 22cf46980ad9b57eb428e7be045a1bc198b6380d (patch) | |
tree | 7c85b09677c64ff93ae5055cbec2b9d042452031 | |
parent | d182897e738ae1fb594ddc88cc27f607266ef5d1 (diff) | |
download | haskell-22cf46980ad9b57eb428e7be045a1bc198b6380d.tar.gz |
Revert "rts: Refactor handling of dead threads' stacks"
This reverts commit e09afbf2a998beea7783e3de5dce5dd3c6ff23db.
-rw-r--r-- | rts/Schedule.c | 4 | ||||
-rw-r--r-- | rts/StgMiscClosures.cmm | 10 | ||||
-rw-r--r-- | rts/StgStartup.cmm | 16 | ||||
-rw-r--r-- | rts/include/rts/storage/Closures.h | 7 | ||||
-rw-r--r-- | rts/include/stg/MiscClosures.h | 1 | ||||
-rw-r--r-- | utils/deriveConstants/Main.hs | 1 |
6 files changed, 9 insertions, 30 deletions
diff --git a/rts/Schedule.c b/rts/Schedule.c index 9b1e98ea17..fa48bef1a7 100644 --- a/rts/Schedule.c +++ b/rts/Schedule.c @@ -1315,9 +1315,7 @@ scheduleHandleThreadFinished (Capability *cap, Task *task, StgTSO *t) if (t->what_next == ThreadComplete) { if (task->incall->ret) { // NOTE: return val is stack->sp[1] (see StgStartup.cmm) - StgDeadThreadFrame *dead = (StgDeadThreadFrame *) &task->incall->tso->stackobj->sp[0]; - ASSERT(dead->header.info == &stg_dead_thread_info); - *(task->incall->ret) = (StgClosure *) dead->result; + *(task->incall->ret) = (StgClosure *)task->incall->tso->stackobj->sp[1]; } task->incall->rstat = Success; } else { diff --git a/rts/StgMiscClosures.cmm b/rts/StgMiscClosures.cmm index dbdd2d71fa..b9aee516d0 100644 --- a/rts/StgMiscClosures.cmm +++ b/rts/StgMiscClosures.cmm @@ -414,16 +414,6 @@ INFO_TABLE_RET( stg_apply_interp, RET_BCO ) jump stg_yield_to_interpreter []; } -/* - * Dummy info table pushed on the top of the stack when the stack's - * owning thread has finished. - */ -INFO_TABLE_RET( stg_dead_thread, RET_SMALL, - W_ info_ptr, - PROF_HDR_FIELDS(W_,p1,p2) - P_ result ) -{ foreign "C" barf("stg_dead_thread entered!") never returns; } - /* ---------------------------------------------------------------------------- Entry code for a BCO ------------------------------------------------------------------------- */ diff --git a/rts/StgStartup.cmm b/rts/StgStartup.cmm index 6d3d47f54f..122eace1f3 100644 --- a/rts/StgStartup.cmm +++ b/rts/StgStartup.cmm @@ -51,13 +51,13 @@ INFO_TABLE_RET(stg_stop_thread, STOP_FRAME, We Leave the stack looking like this: - +----------------------+ - | -----------------------> return value - +----------------------+ - | stg_dead_thread_info | - +----------------------+ + +----------------+ + | -------------------> return value + +----------------+ + | stg_enter_info | + +----------------+ - The stg_dead_thread_info is just a dummy info table so that the + The stg_enter_info is just a dummy info table so that the garbage collector can understand the stack (there must always be an info table on top of the stack). */ @@ -70,9 +70,9 @@ INFO_TABLE_RET(stg_stop_thread, STOP_FRAME, unwind UnwindReturnReg = return; #endif - Sp = Sp + SIZEOF_StgStopFrame - SIZEOF_StgDeadThreadFrame; - Sp(0) = stg_dead_thread_info; + Sp = Sp + SIZEOF_StgStopFrame - WDS(2); Sp(1) = R1; + Sp(0) = stg_enter_info; StgTSO_what_next(CurrentTSO) = ThreadComplete::I16; diff --git a/rts/include/rts/storage/Closures.h b/rts/include/rts/storage/Closures.h index 09c7bfdb88..bfc8308c29 100644 --- a/rts/include/rts/storage/Closures.h +++ b/rts/include/rts/storage/Closures.h @@ -285,13 +285,6 @@ typedef struct { StgHeader header; } StgStopFrame; -// Stack frame indicating that the stack's owning thread has finished. -// -// Closure types: RET_SMALL -typedef struct { - StgHeader header; - StgClosure *result; -} StgDeadThreadFrame; // A function return stack frame: used when saving the state for a // garbage collection at a function entry point. The function diff --git a/rts/include/stg/MiscClosures.h b/rts/include/stg/MiscClosures.h index b5efd9636b..e87eba0931 100644 --- a/rts/include/stg/MiscClosures.h +++ b/rts/include/stg/MiscClosures.h @@ -159,7 +159,6 @@ RTS_RET(stg_ctoi_t61); RTS_RET(stg_ctoi_t62); RTS_RET(stg_apply_interp); -RTS_RET(stg_dead_thread); RTS_ENTRY(stg_IND); RTS_ENTRY(stg_IND_STATIC); diff --git a/utils/deriveConstants/Main.hs b/utils/deriveConstants/Main.hs index 1619f5588c..9a57ecf682 100644 --- a/utils/deriveConstants/Main.hs +++ b/utils/deriveConstants/Main.hs @@ -421,7 +421,6 @@ wanteds os = concat ,closureSize Both "StgUpdateFrame" ,closureSize C "StgCatchFrame" ,closureSize C "StgStopFrame" - ,closureSize C "StgDeadThreadFrame" ,closureSize Both "StgMutArrPtrs" ,closureField Both "StgMutArrPtrs" "ptrs" |