diff options
author | Rickard Green <[email protected]> | 2016-05-27 16:19:08 +0200 |
---|---|---|
committer | Rickard Green <[email protected]> | 2016-05-31 15:38:31 +0200 |
commit | c8bd15f0e5539ec3056565b535ff6db389f42a6b (patch) | |
tree | a7ddf65c19a0b22f2a06e52e94e05ea245568f38 /erts/emulator/beam/erl_nif.c | |
parent | 60557173f8a7bd0d4deafdb2b3e066899c586f56 (diff) | |
download | otp-c8bd15f0e5539ec3056565b535ff6db389f42a6b.tar.gz otp-c8bd15f0e5539ec3056565b535ff6db389f42a6b.tar.bz2 otp-c8bd15f0e5539ec3056565b535ff6db389f42a6b.zip |
Move dirty reduction count to erts_dirty_process_main()
Diffstat (limited to 'erts/emulator/beam/erl_nif.c')
-rw-r--r-- | erts/emulator/beam/erl_nif.c | 46 |
1 files changed, 18 insertions, 28 deletions
diff --git a/erts/emulator/beam/erl_nif.c b/erts/emulator/beam/erl_nif.c index 4437adb57b..f1c35cd5a5 100644 --- a/erts/emulator/beam/erl_nif.c +++ b/erts/emulator/beam/erl_nif.c @@ -178,11 +178,6 @@ static ERTS_INLINE void ensure_heap(ErlNifEnv* env, size_t may_need) void erts_pre_nif(ErlNifEnv* env, Process* p, struct erl_module_nif* mod_nif, Process* tracee) { -#ifdef DEBUG -#ifdef ERTS_DIRTY_SCHEDULERS - ErtsSchedulerData *esdp; -#endif -#endif env->mod_nif = mod_nif; env->proc = p; env->hp = HEAP_TOP(p); @@ -195,46 +190,41 @@ void erts_pre_nif(ErlNifEnv* env, Process* p, struct erl_module_nif* mod_nif, ASSERT(p->common.id != ERTS_INVALID_PID); -#ifdef DEBUG -#ifdef ERTS_DIRTY_SCHEDULERS - esdp = erts_get_scheduler_data(); - ASSERT(esdp); +#if defined(DEBUG) && defined(ERTS_DIRTY_SCHEDULERS) + { + ErtsSchedulerData *esdp = erts_get_scheduler_data(); + ASSERT(esdp); - if (!ERTS_SCHEDULER_IS_DIRTY(esdp)) { - erts_aint32_t state = erts_smp_atomic32_read_nob(&p->state); + if (!ERTS_SCHEDULER_IS_DIRTY(esdp)) { + erts_aint32_t state = erts_smp_atomic32_read_nob(&p->state); - ASSERT(p->scheduler_data == esdp); - ASSERT((state & (ERTS_PSFLG_RUNNING - | ERTS_PSFLG_RUNNING_SYS)) - && !(state & (ERTS_PSFLG_DIRTY_RUNNING - | ERTS_PSFLG_DIRTY_RUNNING_SYS))); + ASSERT(p->scheduler_data == esdp); + ASSERT((state & (ERTS_PSFLG_RUNNING + | ERTS_PSFLG_RUNNING_SYS)) + && !(state & (ERTS_PSFLG_DIRTY_RUNNING + | ERTS_PSFLG_DIRTY_RUNNING_SYS))); + } } #endif -#endif } -void erts_pre_dirty_nif(ErlNifEnv* env, Process* p, struct erl_module_nif* mod_nif, +void erts_pre_dirty_nif(ErtsSchedulerData *esdp, + ErlNifEnv* env, Process* p, struct erl_module_nif* mod_nif, Process* tracee) { #ifdef ERTS_DIRTY_SCHEDULERS -#ifdef DEBUG - erts_aint32_t state; -#endif Process *sproc; - ErtsSchedulerData *esdp; - esdp = erts_get_scheduler_data(); - ASSERT(esdp); - - erts_pre_nif(env, p, mod_nif, tracee); - #ifdef DEBUG - state = erts_smp_atomic32_read_nob(&p->state); + erts_aint32_t state = erts_smp_atomic32_read_nob(&p->state); ASSERT(!p->scheduler_data); ASSERT((state & ERTS_PSFLG_DIRTY_RUNNING) && !(state & (ERTS_PSFLG_RUNNING|ERTS_PSFLG_RUNNING_SYS))); + ASSERT(esdp); #endif + erts_pre_nif(env, p, mod_nif, tracee); + sproc = esdp->dirty_shadow_process; ASSERT(sproc); ASSERT(sproc->static_flags & ERTS_STC_FLG_SHADOW_PROC); |