diff --git a/mps/src/arenavm.c b/mps/src/arenavm.c index a9dfa77aafe..97f0cf8881e 100644 --- a/mps/src/arenavm.c +++ b/mps/src/arenavm.c @@ -1,6 +1,6 @@ /* impl.c.arenavm: VIRTUAL MEMORY BASED ARENA IMPLEMENTATION * - * $HopeName: MMsrc!arenavm.c(trunk.53) $ + * $HopeName: MMsrc!arenavm.c(trunk.54) $ * Copyright (C) 1998. Harlequin Group plc. All rights reserved. * * PURPOSE @@ -32,7 +32,7 @@ #include "mpm.h" #include "mpsavm.h" -SRCID(arenavm, "$HopeName: MMsrc!arenavm.c(trunk.53) $"); +SRCID(arenavm, "$HopeName: MMsrc!arenavm.c(trunk.54) $"); /* @@@@ Arbitrary calculation for the maximum number of distinct */ @@ -1294,6 +1294,13 @@ static Res VMSegAlloc(Seg *segReturn, SegPref pref, Size size, /* must be non-NULL. */ AVER(pool != NULL); + /* SegAlloc will necessarily increase committed by size */ + /* (possibly more) so check that first. */ + if(vmArena->committed + size > arena->commitLimit || + vmArena->committed + size < vmArena->committed) { + return ResCOMMIT_LIMIT; + } + if(!VMSegFind(&baseIndex, &chunk, vmArena, pref, size, FALSE)) { VMArenaChunk newChunk; Size chunkSize;