From dcc6ceba404e4e2b20f3b930946a05e537ee82b5 Mon Sep 17 00:00:00 2001 From: David Jones Date: Fri, 28 Aug 1998 14:58:34 +0100 Subject: [PATCH] Moving segalloc segfree events to generic code Copied from Perforce Change: 19902 ServerID: perforce.ravenbrook.com --- mps/src/arena.c | 26 ++++++++++++++++---------- mps/src/arenavm.c | 10 ++++------ 2 files changed, 20 insertions(+), 16 deletions(-) diff --git a/mps/src/arena.c b/mps/src/arena.c index 58fd571051e..d309d2e87ee 100644 --- a/mps/src/arena.c +++ b/mps/src/arena.c @@ -1,6 +1,6 @@ /* impl.c.arena: ARENA IMPLEMENTATION * - * $HopeName: MMsrc!arena.c(trunk.47) $ + * $HopeName: MMsrc!arena.c(trunk.48) $ * Copyright (C) 1998. Harlequin Group plc. All rights reserved. * * .readership: Any MPS developer @@ -36,7 +36,7 @@ #include "poolmrg.h" #include "mps.h" -SRCID(arena, "$HopeName: MMsrc!arena.c(trunk.47) $"); +SRCID(arena, "$HopeName: MMsrc!arena.c(trunk.48) $"); /* Forward declarations */ @@ -1189,8 +1189,8 @@ Res SegAlloc(Seg *segReturn, SegPref pref, Size size, Pool pool, Bool withReservoirPermit) { Res res; - Seg seg; Arena arena; + Seg seg; AVER(segReturn != NULL); AVERT(SegPref, pref); @@ -1210,15 +1210,20 @@ Res SegAlloc(Seg *segReturn, SegPref pref, Size size, Pool pool, } res = (*arena->class->segAlloc)(&seg, pref, size, pool); - if (res == ResOK) { - *segReturn = seg; - return ResOK; - } else if (withReservoirPermit) { + if(res == ResOK) { + goto goodAlloc; + } else if(withReservoirPermit) { AVER(ResIsAllocFailure(res)); - return ArenaAllocSegFromReservoir(segReturn, arena, size, pool); - } else { - return res; + res = ArenaAllocSegFromReservoir(&seg, arena, size, pool); + if(res == ResOK) + goto goodAlloc; } + return res; + +goodAlloc: + EVENT_PPAWP(SegAlloc, arena, seg, SegBase(seg), size, pool); + *segReturn = seg; + return ResOK; } @@ -1241,6 +1246,7 @@ void SegFree(Seg seg) ArenaReturnSegToReservoir(arena, seg); } + EVENT_PP(SegFree, arena, seg); return; } diff --git a/mps/src/arenavm.c b/mps/src/arenavm.c index d84e833b9fa..9db823458f8 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.50) $ + * $HopeName: MMsrc!arenavm.c(trunk.51) $ * Copyright (C) 1998. Harlequin Group plc. All rights reserved. * * This is the implementation of the Segment abstraction from the VM @@ -29,7 +29,7 @@ #include "mpm.h" #include "mpsavm.h" -SRCID(arenavm, "$HopeName: MMsrc!arenavm.c(trunk.50) $"); +SRCID(arenavm, "$HopeName: MMsrc!arenavm.c(trunk.51) $"); typedef struct VMArenaStruct *VMArena; @@ -1347,8 +1347,6 @@ static Res VMSegAlloc(Seg *segReturn, SegPref pref, Size size, AVERT(Seg, seg); - EVENT_PPAWP(SegAlloc, vmArena, seg, addr, size, pool); - *segReturn = seg; return ResOK; @@ -1361,7 +1359,7 @@ failSegMap: static VMArenaChunk VMArenaChunkOfSeg(VMArena vmArena, Seg seg) { Ring node, next; - /* critcal because used from critical functions */ + /* critical because used from critical functions */ AVERT_CRITICAL(VMArena, vmArena); AVERT_CRITICAL(Seg, seg); @@ -1428,7 +1426,7 @@ static void VMSegFree(Seg seg) chunk, basePage, basePage + pages)) VMArenaUnmap(vmArena, chunk->vm, unusedPagesBase, unusedPagesLimit); - EVENT_PP(SegFree, vmArena, seg); + return; } /* .seg.critical: These Seg functions are low-level and are on