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:
parent
3fa38fded7
commit
dcc6ceba40
2 changed files with 20 additions and 16 deletions
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue