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 <firstname.lastname@example.org> 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; }