mirror of
git://git.sv.gnu.org/emacs.git
synced 2025-12-28 08:11:05 -08:00
Separating arenaenter from stack_context_begin and arenaleave from stack_context_end as they are not conceptually nested that way.
Copied from Perforce Change: 189446 ServerID: perforce.ravenbrook.com
This commit is contained in:
parent
acc5857820
commit
d8d5ebbe91
2 changed files with 30 additions and 12 deletions
|
|
@ -231,9 +231,11 @@ void mps_arena_clamp(mps_arena_t arena)
|
|||
|
||||
void mps_arena_release(mps_arena_t arena)
|
||||
{
|
||||
ArenaEnter(arena);
|
||||
STACK_CONTEXT_BEGIN(arena) {
|
||||
ArenaRelease(ArenaGlobals(arena));
|
||||
} STACK_CONTEXT_END(arena);
|
||||
ArenaLeave(arena);
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -271,19 +273,23 @@ void mps_arena_unsafe_restore_protection(mps_arena_t arena)
|
|||
mps_res_t mps_arena_start_collect(mps_arena_t arena)
|
||||
{
|
||||
Res res;
|
||||
ArenaEnter(arena);
|
||||
STACK_CONTEXT_BEGIN(arena) {
|
||||
res = ArenaStartCollect(ArenaGlobals(arena),
|
||||
TraceStartWhyCLIENTFULL_INCREMENTAL);
|
||||
} STACK_CONTEXT_END(arena);
|
||||
ArenaLeave(arena);
|
||||
return (mps_res_t)res;
|
||||
}
|
||||
|
||||
mps_res_t mps_arena_collect(mps_arena_t arena)
|
||||
{
|
||||
Res res;
|
||||
ArenaEnter(arena);
|
||||
STACK_CONTEXT_BEGIN(arena) {
|
||||
res = ArenaCollect(ArenaGlobals(arena), TraceStartWhyCLIENTFULL_BLOCK);
|
||||
} STACK_CONTEXT_END(arena);
|
||||
ArenaLeave(arena);
|
||||
return (mps_res_t)res;
|
||||
}
|
||||
|
||||
|
|
@ -292,9 +298,11 @@ mps_bool_t mps_arena_step(mps_arena_t arena,
|
|||
double multiplier)
|
||||
{
|
||||
Bool b;
|
||||
ArenaEnter(arena);
|
||||
STACK_CONTEXT_BEGIN(arena) {
|
||||
b = ArenaStep(ArenaGlobals(arena), interval, multiplier);
|
||||
} STACK_CONTEXT_END(arena);
|
||||
ArenaLeave(arena);
|
||||
return b;
|
||||
}
|
||||
|
||||
|
|
@ -734,6 +742,7 @@ mps_res_t mps_alloc(mps_addr_t *p_o, mps_pool_t pool, size_t size)
|
|||
AVER(TESTT(Pool, pool));
|
||||
arena = PoolArena(pool);
|
||||
|
||||
ArenaEnter(arena);
|
||||
STACK_CONTEXT_BEGIN(arena) {
|
||||
|
||||
ArenaPoll(ArenaGlobals(arena)); /* .poll */
|
||||
|
|
@ -750,6 +759,7 @@ mps_res_t mps_alloc(mps_addr_t *p_o, mps_pool_t pool, size_t size)
|
|||
res = PoolAlloc(&p, pool, size, FALSE);
|
||||
|
||||
} STACK_CONTEXT_END(arena);
|
||||
ArenaLeave(arena);
|
||||
|
||||
if (res != ResOK)
|
||||
return (mps_res_t)res;
|
||||
|
|
@ -1041,6 +1051,7 @@ mps_res_t mps_ap_fill(mps_addr_t *p_o, mps_ap_t mps_ap, size_t size)
|
|||
AVER(TESTT(Buffer, buf));
|
||||
arena = BufferArena(buf);
|
||||
|
||||
ArenaEnter(arena);
|
||||
STACK_CONTEXT_BEGIN(arena) {
|
||||
|
||||
ArenaPoll(ArenaGlobals(arena)); /* .poll */
|
||||
|
|
@ -1053,6 +1064,7 @@ mps_res_t mps_ap_fill(mps_addr_t *p_o, mps_ap_t mps_ap, size_t size)
|
|||
res = BufferFill(&p, buf, size, FALSE);
|
||||
|
||||
} STACK_CONTEXT_END(arena);
|
||||
ArenaLeave(arena);
|
||||
|
||||
if (res != ResOK)
|
||||
return (mps_res_t)res;
|
||||
|
|
@ -1073,6 +1085,7 @@ mps_res_t mps_ap_fill_with_reservoir_permit(mps_addr_t *p_o, mps_ap_t mps_ap,
|
|||
AVER(TESTT(Buffer, buf));
|
||||
arena = BufferArena(buf);
|
||||
|
||||
ArenaEnter(arena);
|
||||
STACK_CONTEXT_BEGIN(arena) {
|
||||
|
||||
ArenaPoll(ArenaGlobals(arena)); /* .poll */
|
||||
|
|
@ -1085,6 +1098,7 @@ mps_res_t mps_ap_fill_with_reservoir_permit(mps_addr_t *p_o, mps_ap_t mps_ap,
|
|||
res = BufferFill(&p, buf, size, TRUE);
|
||||
|
||||
} STACK_CONTEXT_END(arena);
|
||||
ArenaLeave(arena);
|
||||
|
||||
if (res != ResOK)
|
||||
return (mps_res_t)res;
|
||||
|
|
@ -1874,10 +1888,12 @@ mps_res_t mps_ap_alloc_pattern_end(mps_ap_t mps_ap,
|
|||
|
||||
arena = BufferArena(BufferOfAP(mps_ap));
|
||||
|
||||
ArenaEnter(arena);
|
||||
STACK_CONTEXT_BEGIN(arena) {
|
||||
res = BufferRampEnd(BufferOfAP(mps_ap));
|
||||
ArenaPoll(ArenaGlobals(arena)); /* .poll */
|
||||
} STACK_CONTEXT_END(arena);
|
||||
ArenaLeave(arena);
|
||||
|
||||
return (mps_res_t)res;
|
||||
}
|
||||
|
|
@ -1892,10 +1908,12 @@ mps_res_t mps_ap_alloc_pattern_reset(mps_ap_t mps_ap)
|
|||
|
||||
arena = BufferArena(BufferOfAP(mps_ap));
|
||||
|
||||
ArenaEnter(arena);
|
||||
STACK_CONTEXT_BEGIN(arena) {
|
||||
BufferRampReset(BufferOfAP(mps_ap));
|
||||
ArenaPoll(ArenaGlobals(arena)); /* .poll */
|
||||
} STACK_CONTEXT_END(arena);
|
||||
ArenaLeave(arena);
|
||||
|
||||
return MPS_RES_OK;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -24,23 +24,23 @@ typedef struct StackContextStruct {
|
|||
} StackContextStruct;
|
||||
|
||||
|
||||
/* STACK_CONTEXT_BEGIN -- enter arena and save context */
|
||||
/* STACK_CONTEXT_BEGIN -- save context */
|
||||
|
||||
#define STACK_CONTEXT_BEGIN(arena) BEGIN \
|
||||
StackContextStruct _sc; \
|
||||
ArenaEnter(arena); \
|
||||
STACK_CONTEXT_SAVE(&_sc); \
|
||||
AVER(arena->scAtArenaEnter == NULL); \
|
||||
arena->scAtArenaEnter = &_sc; \
|
||||
BEGIN
|
||||
#define STACK_CONTEXT_BEGIN(arena) \
|
||||
BEGIN \
|
||||
StackContextStruct _sc; \
|
||||
STACK_CONTEXT_SAVE(&_sc); \
|
||||
AVER(arena->scAtArenaEnter == NULL); \
|
||||
arena->scAtArenaEnter = &_sc; \
|
||||
BEGIN
|
||||
|
||||
|
||||
/* STACK_CONTEXT_END -- clear context and leave arena */
|
||||
|
||||
#define STACK_CONTEXT_END(arena) END; \
|
||||
AVER(arena->scAtArenaEnter != NULL); \
|
||||
arena->scAtArenaEnter = NULL; \
|
||||
ArenaLeave(arena); \
|
||||
#define STACK_CONTEXT_END(arena) \
|
||||
END; \
|
||||
AVER(arena->scAtArenaEnter != NULL); \
|
||||
arena->scAtArenaEnter = NULL; \
|
||||
END
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue