diff --git a/mps/src/arena.c b/mps/src/arena.c index cddaf115aea..b33c13f8b20 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.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)) { diff --git a/mps/src/mpm.h b/mps/src/mpm.h index f0adb7d1c52..fd2e0f4acd0 100644 --- a/mps/src/mpm.h +++ b/mps/src/mpm.h @@ -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); diff --git a/mps/src/mpmtypes.h b/mps/src/mpmtypes.h index 88e149b5edd..201828db194 100644 --- a/mps/src/mpmtypes.h +++ b/mps/src/mpmtypes.h @@ -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); diff --git a/mps/src/pool.c b/mps/src/pool.c index c2d84eac59a..8c541c7aa3e 100644 --- a/mps/src/pool.c +++ b/mps/src/pool.c @@ -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; }