From 32ca5da8e5f380a777edf2dacc734c4b67d41f20 Mon Sep 17 00:00:00 2001 From: Simon Marlow Date: Thu, 28 May 2009 13:33:57 +0000 Subject: [PATCH] Fix #3156: ensure preconditions of splitLargeBlock() --- rts/Schedule.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/rts/Schedule.c b/rts/Schedule.c index 0b4c5b6..f376286 100644 --- a/rts/Schedule.c +++ b/rts/Schedule.c @@ -2436,9 +2436,16 @@ threadStackUnderflow (Task *task STG_UNUSED, StgTSO *tso) tso_size_w = tso_sizeW(tso); - if (tso_size_w < MBLOCK_SIZE_W || + if (tso_size_w < MBLOCK_SIZE_W || + // TSO is less than 2 mblocks (since the first mblock is + // shorter than MBLOCK_SIZE_W) + (tso_size_w - BLOCKS_PER_MBLOCK*BLOCK_SIZE_W) % MBLOCK_SIZE_W != 0 || + // or TSO is not a whole number of megablocks (ensuring + // precondition of splitLargeBlock() below) (nat)(tso->stack + tso->stack_size - tso->sp) > tso->stack_size / 4) + // or stack is using more than 1/4 of the available space { + // then do nothing return tso; } -- 1.7.10.4