mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-04-06 22:31:13 -07:00
Passing mutatorfaultcontext down through to pool class specific method
Copied from Perforce Change: 19435 ServerID: perforce.ravenbrook.com
This commit is contained in:
parent
33075407c2
commit
4aa634eceb
4 changed files with 25 additions and 18 deletions
|
|
@ -1,6 +1,6 @@
|
|||
/* impl.c.arena: ARENA IMPLEMENTATION
|
||||
*
|
||||
* $HopeName: MMsrc!arena.c(trunk.35) $
|
||||
* $HopeName: MMsrc!arena.c(trunk.36) $
|
||||
* 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.35) $");
|
||||
SRCID(arena, "$HopeName: MMsrc!arena.c(trunk.36) $");
|
||||
|
||||
|
||||
/* All static data objects are declared here. See .static */
|
||||
|
|
@ -474,8 +474,6 @@ Bool ArenaAccess(Addr addr, AccessSet mode, MutatorFaultContext context)
|
|||
Seg seg;
|
||||
Ring node, nextNode;
|
||||
|
||||
UNUSED(context);
|
||||
|
||||
LockClaim(&arenaRingLock); /* design.mps.arena.lock.ring */
|
||||
RING_FOR(node, &arenaRing, nextNode) {
|
||||
Arena arena = RING_ELT(Arena, globalRing, node);
|
||||
|
|
@ -496,7 +494,7 @@ Bool ArenaAccess(Addr addr, AccessSet mode, MutatorFaultContext context)
|
|||
*/
|
||||
mode &= SegPM(seg);
|
||||
if(mode != AccessSetEMPTY)
|
||||
PoolAccess(SegPool(seg), seg, addr, mode);
|
||||
PoolAccess(SegPool(seg), seg, addr, mode, context);
|
||||
ArenaLeave(arena);
|
||||
return TRUE;
|
||||
} else if(RootOfAddr(&root, arena, addr)) {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
/* impl.h.mpm: MEMORY POOL MANAGER DEFINITIONS
|
||||
*
|
||||
* $HopeName: MMsrc!mpm.h(trunk.81) $
|
||||
* $HopeName: MMsrc!mpm.h(trunk.82) $
|
||||
* Copyright (C) 1998. Harlequin Group plc. All rights reserved.
|
||||
*/
|
||||
|
||||
|
|
@ -278,7 +278,8 @@ extern void PoolDestroy(Pool pool);
|
|||
extern Res PoolAlloc(Addr *pReturn, Pool pool, Size size);
|
||||
extern void PoolFree(Pool pool, Addr old, Size size);
|
||||
extern Res PoolTraceBegin(Pool pool, Trace trace);
|
||||
extern Res PoolAccess(Pool pool, Seg seg, Addr addr, AccessSet mode);
|
||||
extern Res PoolAccess(Pool pool, Seg seg, Addr addr,
|
||||
AccessSet mode, MutatorFaultContext context);
|
||||
extern Res PoolWhiten(Pool pool, Trace trace, Seg seg);
|
||||
extern void PoolGrey(Pool pool, Trace trace, Seg seg);
|
||||
extern void PoolBlacken(Pool pool, TraceSet traceSet, Seg seg);
|
||||
|
|
@ -313,8 +314,10 @@ extern Res PoolNoDescribe(Pool pool, mps_lib_FILE *stream);
|
|||
extern Res PoolTrivDescribe(Pool pool, mps_lib_FILE *stream);
|
||||
extern Res PoolNoTraceBegin(Pool pool, Trace trace);
|
||||
extern Res PoolTrivTraceBegin(Pool pool, Trace trace);
|
||||
extern Res PoolNoAccess(Pool pool, Seg seg, Addr addr, AccessSet mode);
|
||||
extern Res PoolSegAccess(Pool pool, Seg seg, Addr addr, AccessSet mode);
|
||||
extern Res PoolNoAccess(Pool pool, Seg seg, Addr addr,
|
||||
AccessSet mode, MutatorFaultContext context);
|
||||
extern Res PoolSegAccess(Pool pool, Seg seg, Addr addr,
|
||||
AccessSet mode, MutatorFaultContext context);
|
||||
extern Res PoolNoWhiten(Pool pool, Trace trace, Seg seg);
|
||||
extern Res PoolTrivWhiten(Pool pool, Trace trace, Seg seg);
|
||||
extern void PoolNoGrey(Pool pool, Trace trace, Seg seg);
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
/* impl.h.mpmtypes: MEMORY POOL MANAGER TYPES
|
||||
*
|
||||
* $HopeName: MMsrc!mpmtypes.h(trunk.45) $
|
||||
* $HopeName: MMsrc!mpmtypes.h(trunk.46) $
|
||||
* Copyright (C) 1997 The Harlequin Group Limited. All rights reserved.
|
||||
*
|
||||
* .readership: MM developers.
|
||||
|
|
@ -129,7 +129,7 @@ typedef void (*PoolBufferEmptyMethod)(Pool pool, Buffer buffer);
|
|||
typedef void (*PoolBufferFinishMethod)(Pool pool, Buffer buf);
|
||||
typedef Res (*PoolTraceBeginMethod)(Pool pool, Trace trace);
|
||||
typedef Res (*PoolAccessMethod)(Pool pool, Seg seg, Addr addr,
|
||||
AccessSet mode);
|
||||
AccessSet mode, MutatorFaultContext context);
|
||||
typedef Res (*PoolWhitenMethod)(Pool pool, Trace trace, Seg seg);
|
||||
typedef void (*PoolGreyMethod)(Pool pool, Trace trace, Seg seg);
|
||||
typedef void (*PoolBlackenMethod)(Pool pool, TraceSet traceSet, Seg seg);
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
/* impl.c.pool: POOL IMPLEMENTATION
|
||||
*
|
||||
* $HopeName: MMsrc!pool.c(trunk.49) $
|
||||
* $HopeName: MMsrc!pool.c(trunk.50) $
|
||||
* Copyright (C) 1997. Harlequin Group plc. All rights reserved.
|
||||
*
|
||||
* READERSHIP
|
||||
|
|
@ -37,7 +37,7 @@
|
|||
|
||||
#include "mpm.h"
|
||||
|
||||
SRCID(pool, "$HopeName: MMsrc!pool.c(trunk.49) $");
|
||||
SRCID(pool, "$HopeName: MMsrc!pool.c(trunk.50) $");
|
||||
|
||||
|
||||
Bool PoolClassCheck(PoolClass class)
|
||||
|
|
@ -301,15 +301,17 @@ Res PoolTraceBegin(Pool pool, Trace trace)
|
|||
return (*pool->class->traceBegin)(pool, trace);
|
||||
}
|
||||
|
||||
Res PoolAccess(Pool pool, Seg seg, Addr addr, AccessSet mode)
|
||||
Res PoolAccess(Pool pool, Seg seg, Addr addr,
|
||||
AccessSet mode, MutatorFaultContext context)
|
||||
{
|
||||
AVERT(Pool, pool);
|
||||
AVERT(Seg, seg);
|
||||
AVER(SegBase(seg) <= addr);
|
||||
AVER(addr < SegLimit(seg));
|
||||
/* Can't check mode as there is no check method */
|
||||
/* Can't check MutatorFaultContext as there is no check method */
|
||||
|
||||
return (*pool->class->access)(pool, seg, addr, mode);
|
||||
return (*pool->class->access)(pool, seg, addr, mode, context);
|
||||
}
|
||||
|
||||
Res PoolWhiten(Pool pool, Trace trace, Seg seg)
|
||||
|
|
@ -734,14 +736,17 @@ Res PoolTrivTraceBegin(Pool pool, Trace trace)
|
|||
* That is, no protected pages, or only pages which are inaccessible
|
||||
* by the mutator are protected.
|
||||
*/
|
||||
Res PoolNoAccess(Pool pool, Seg seg, Addr addr, AccessSet mode)
|
||||
Res PoolNoAccess(Pool pool, Seg seg, Addr addr,
|
||||
AccessSet mode, MutatorFaultContext context)
|
||||
{
|
||||
AVERT(Pool, pool);
|
||||
AVERT(Seg, seg);
|
||||
AVER(SegBase(seg) <= addr);
|
||||
AVER(addr < SegLimit(seg));
|
||||
/* can't check AccessSet as there is no Check method */
|
||||
/* can't check context as there is no Check method */
|
||||
UNUSED(mode);
|
||||
UNUSED(context);
|
||||
|
||||
NOTREACHED;
|
||||
return ResUNIMPL;
|
||||
|
|
@ -753,7 +758,8 @@ Res PoolNoAccess(Pool pool, Seg seg, Addr addr, AccessSet mode)
|
|||
* to handle page faults by scanning the entire segment and lowering
|
||||
* the barrier.
|
||||
*/
|
||||
Res PoolSegAccess(Pool pool, Seg seg, Addr addr, AccessSet mode)
|
||||
Res PoolSegAccess(Pool pool, Seg seg, Addr addr,
|
||||
AccessSet mode, MutatorFaultContext context)
|
||||
{
|
||||
AVERT(Pool, pool);
|
||||
AVERT(Seg, seg);
|
||||
|
|
@ -763,7 +769,7 @@ Res PoolSegAccess(Pool pool, Seg seg, Addr addr, AccessSet mode)
|
|||
/* can't check AccessSet as there is no Check method */
|
||||
|
||||
UNUSED(addr);
|
||||
UNUSED(pool);
|
||||
UNUSED(context);
|
||||
TraceSegAccess(PoolArena(pool), seg, mode);
|
||||
return ResOK;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue