Opened 6 months ago

Closed 6 months ago

#8435 closed bug (fixed)

Do not copy stack after stack overflow

Reported by: ezyang Owned by: simonmar
Priority: normal Milestone:
Component: Runtime System Version: 7.7
Keywords: Cc: simonmar
Operating System: Unknown/Multiple Architecture: Unknown/Multiple
Type of failure: Runtime performance bug Difficulty: Unknown
Test Case: Blocked By:
Blocking: Related Tickets:

Description

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;
     }
 
 

Change History (3)

comment:1 Changed 6 months ago by simonmar

Sounds reasonable to me. If it validates, go ahead and push.

comment:2 Changed 6 months ago by Edward Z. Yang <ezyang@…>

In 9fb30cbcbc02086c5c6eb3942acdfdcad8331cb9/ghc:

Do not copy stack after stack overflow, fixes #8435

Signed-off-by: Edward Z. Yang <ezyang@mit.edu>

comment:3 Changed 6 months ago by ezyang

  • Resolution set to fixed
  • Status changed from new to closed
Note: See TracTickets for help on using tickets.