diff options
author | Rickard Green <[email protected]> | 2016-11-22 15:31:44 +0100 |
---|---|---|
committer | Rickard Green <[email protected]> | 2016-11-22 16:23:36 +0100 |
commit | ea15a660908c48a2b8cefe0ed90fc5c4a89fe572 (patch) | |
tree | 23bc874049721e8451304a2d689f8297d263f46e /erts/emulator/beam/erl_process.c | |
parent | e9ac0c64a78c858d474757d435f3c7dce2a224b1 (diff) | |
download | otp-ea15a660908c48a2b8cefe0ed90fc5c4a89fe572.tar.gz otp-ea15a660908c48a2b8cefe0ed90fc5c4a89fe572.tar.bz2 otp-ea15a660908c48a2b8cefe0ed90fc5c4a89fe572.zip |
Fix scheduling of system tasks on processes executing dirty
Diffstat (limited to 'erts/emulator/beam/erl_process.c')
-rw-r--r-- | erts/emulator/beam/erl_process.c | 14 |
1 files changed, 1 insertions, 13 deletions
diff --git a/erts/emulator/beam/erl_process.c b/erts/emulator/beam/erl_process.c index adf7779fe5..92b3d9d1a8 100644 --- a/erts/emulator/beam/erl_process.c +++ b/erts/emulator/beam/erl_process.c @@ -6691,15 +6691,8 @@ schedule_process_sys_task(Process *p, erts_aint32_t prio, ErtsProcSysTask *st, erts_aint32_t fail_state, state, a, n, enq_prio; int enqueue; /* < 0 -> use proxy */ unsigned int prof_runnable_procs; - int strict_fail_state; fail_state = *fail_state_p; - /* - * If fail state something other than just exiting process, - * ensure that the task wont be scheduled when the - * receiver is in the failure state. - */ - strict_fail_state = fail_state != ERTS_PSFLG_EXITING; res = 1; /* prepare for success */ st->next = st->prev = st; /* Prep for empty prio queue */ @@ -6781,7 +6774,7 @@ schedule_process_sys_task(Process *p, erts_aint32_t prio, ErtsProcSysTask *st, /* Status lock prevents out of order "runnable proc" trace msgs */ ERTS_SMP_LC_ASSERT(ERTS_PROC_LOCK_STATUS & erts_proc_lc_my_proc_locks(p)); - if (!prof_runnable_procs && !strict_fail_state) { + if (!prof_runnable_procs) { erts_smp_proc_unlock(p, ERTS_PROC_LOCK_STATUS); locked = 0; } @@ -6792,11 +6785,6 @@ schedule_process_sys_task(Process *p, erts_aint32_t prio, ErtsProcSysTask *st, erts_aint32_t e; n = e = a; - if (strict_fail_state && (a & fail_state)) { - *fail_state_p = (a & fail_state); - goto cleanup; - } - if (a & ERTS_PSFLG_FREE) goto cleanup; /* We don't want to schedule free processes... */ |