From: Simon Marlow Date: Thu, 28 Jan 2010 12:44:54 +0000 (+0000) Subject: tweak the totally-bogus arbitrary stack-squeezing heuristic to fix #2797 X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=commitdiff_plain;h=990171bf9ee314fff0a72f8f875f0a62f6e494b7 tweak the totally-bogus arbitrary stack-squeezing heuristic to fix #2797 In #2797, a program that ran in constant stack space when compiled needed linear stack space when interpreted. It turned out to be nothing more than stack-squeezing not happening. We have a heuristic to avoid stack-squeezing when it would be too expensive (shuffling a large amount of memory to save a few words), but in some cases even expensive stack-squeezing is necessary to avoid linear stack usage. One day we should implement stack chunks, which would make this less expensive. --- diff --git a/rts/ThreadPaused.c b/rts/ThreadPaused.c index 93ec960..75712b0 100644 --- a/rts/ThreadPaused.c +++ b/rts/ThreadPaused.c @@ -315,7 +315,8 @@ end: // the number of words we have to shift down is less than the // number of stack words we squeeze away by doing so. if (RtsFlags.GcFlags.squeezeUpdFrames == rtsTrue && - ((weight <= 5 && words_to_squeeze > 0) || weight < words_to_squeeze)) { + ((weight <= 8 && words_to_squeeze > 0) || weight < words_to_squeeze)) { + // threshold above bumped from 5 to 8 as a result of #2797 stackSqueeze(cap, tso, (StgPtr)frame); tso->flags |= TSO_SQUEEZED; // This flag tells threadStackOverflow() that the stack was