From 7ee236ee5127bb0138d29bcb9e5980abd506e559 Mon Sep 17 00:00:00 2001 From: David Jones Date: Wed, 9 Sep 1998 12:50:14 +0100 Subject: [PATCH] Adding necessary commit-limit check to vmsegalloc _before_ attempting allocation, change.epcore.anchovy.160132 Copied from Perforce Change: 20010 ServerID: perforce.ravenbrook.com --- mps/src/arenavm.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) 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;