summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Pickering <matthewtpickering@gmail.com>2022-04-28 15:24:50 +0100
committerMatthew Pickering <matthewtpickering@gmail.com>2022-04-28 15:24:50 +0100
commit23bceada811683f229c3c19c083066fda5d9f653 (patch)
treef18917ac6244c3b1dd0cc740a7818df05df975d1
parent81cf52bb301592ff3d043d03eb9a0d547891a3e1 (diff)
downloadhaskell-wip/try-revert.tar.gz
Revert "rts: Refactor handling of dead threads' stacks"wip/try-revert
This reverts commit e09afbf2a998beea7783e3de5dce5dd3c6ff23db.
-rw-r--r--rts/Schedule.c4
-rw-r--r--rts/StgMiscClosures.cmm10
-rw-r--r--rts/StgStartup.cmm16
-rw-r--r--rts/include/rts/storage/Closures.h7
-rw-r--r--rts/include/stg/MiscClosures.h1
-rw-r--r--utils/deriveConstants/Main.hs1
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"