1
Fork 0
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:
Richard Brooksby 2016-02-12 15:22:34 +00:00
parent acc5857820
commit d8d5ebbe91
2 changed files with 30 additions and 12 deletions

View file

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

View file

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