From 990171bf9ee314fff0a72f8f875f0a62f6e494b7 Mon Sep 17 00:00:00 2001 From: Simon Marlow Date: Thu, 28 Jan 2010 12:44:54 +0000 Subject: [PATCH] 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. --- rts/ThreadPaused.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 -- 1.7.10.4