Do not copy stack after stack overflow
I am not sure, but I was doing a close reading of threadStackOverflow and noticed that after we throw a stack overflow exception, we fall through to the code responsible for allocating a new stack and copying the code over. An old iteration of the stack overflow code (removed in the commit cited below) did return after throwing the exception, and I did not see anything in the commit message suggesting the change was intentional. It seems sound to copy the stack; it will just become dead immediately.
The relevant commit:
commit f30d527344db528618f64a25250a3be557d9f287
Author: Simon Marlow <marlowsd@gmail.com>
Date: Wed Dec 15 12:08:43 2010 +0000
Implement stack chunks and separate TSO/STACK objects
Suggested (untested) patch:
diff --git a/rts/Threads.c b/rts/Threads.c
index 742119d..ccd6b17 100644
--- a/rts/Threads.c
+++ b/rts/Threads.c
@@ -533,6 +533,7 @@ threadStackOverflow (Capability *cap, StgTSO *tso)
// Send this thread the StackOverflow exception
throwToSingleThreaded(cap, tso, (StgClosure *)stackOverflow_closure);
+ return;
}
Trac metadata
| Trac field | Value |
|---|---|
| Version | 7.7 |
| Type | Bug |
| TypeOfFailure | OtherFailure |
| Priority | normal |
| Resolution | Unresolved |
| Component | Runtime System |
| Test case | |
| Differential revisions | |
| BlockedBy | |
| Related | |
| Blocking | |
| CC | simonmar |
| Operating system | |
| Architecture |