1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2026-01-28 07:50:48 -08:00

Moving segalloc segfree events to generic code

Copied from Perforce
 Change: 19902
 ServerID: perforce.ravenbrook.com
This commit is contained in:
David Jones 1998-08-28 14:58:34 +01:00
parent 3fa38fded7
commit dcc6ceba40
2 changed files with 20 additions and 16 deletions

View file

@ -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;
}

View file

@ -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