diff options
author | Rickard Green <[email protected]> | 2014-01-27 16:29:36 +0100 |
---|---|---|
committer | Rickard Green <[email protected]> | 2014-01-27 16:29:36 +0100 |
commit | a193c51767679c14be2702c49140806495c59831 (patch) | |
tree | dd7d397ae0eee651e525bd7090e966037a50faec /erts/emulator/beam | |
parent | e59682eae1b7c04bfa011f40f202c0ab5a6527cd (diff) | |
parent | ddb919031ec719b6ddf6f992cd1af6c27c0be0c5 (diff) | |
download | otp-a193c51767679c14be2702c49140806495c59831.tar.gz otp-a193c51767679c14be2702c49140806495c59831.tar.bz2 otp-a193c51767679c14be2702c49140806495c59831.zip |
Merge branch 'rickard/load_balance/OTP-11385'
* rickard/load_balance/OTP-11385:
Fix usage of non-empty run-queue flag
Diffstat (limited to 'erts/emulator/beam')
-rw-r--r-- | erts/emulator/beam/erl_port_task.c | 5 | ||||
-rw-r--r-- | erts/emulator/beam/erl_process.c | 19 |
2 files changed, 12 insertions, 12 deletions
diff --git a/erts/emulator/beam/erl_port_task.c b/erts/emulator/beam/erl_port_task.c index 547a42beb2..d4108067d0 100644 --- a/erts/emulator/beam/erl_port_task.c +++ b/erts/emulator/beam/erl_port_task.c @@ -877,6 +877,11 @@ enqueue_port(ErtsRunQueue *runq, Port *pp) ASSERT(runq->ports.start && runq->ports.end); erts_smp_inc_runq_len(runq, &runq->ports.info, ERTS_PORT_PRIO_LEVEL); + +#ifdef ERTS_SMP + if (runq->halt_in_progress) + erts_non_empty_runq(runq); +#endif } static ERTS_INLINE Port * diff --git a/erts/emulator/beam/erl_process.c b/erts/emulator/beam/erl_process.c index 2f383f4c01..74cd84a998 100644 --- a/erts/emulator/beam/erl_process.c +++ b/erts/emulator/beam/erl_process.c @@ -7603,19 +7603,13 @@ Process *schedule(Process *p, int calls) #ifdef ERTS_SMP ErtsMigrationPaths *mps; ErtsMigrationPath *mp; - -#ifdef ERTS_SMP - { - ErtsProcList *pnd_xtrs = rq->procs.pending_exiters; - if (erts_proclist_fetch(&pnd_xtrs, NULL)) { - rq->procs.pending_exiters = NULL; - erts_smp_runq_unlock(rq); - handle_pending_exiters(pnd_xtrs); - erts_smp_runq_lock(rq); - } - + ErtsProcList *pnd_xtrs = rq->procs.pending_exiters; + if (erts_proclist_fetch(&pnd_xtrs, NULL)) { + rq->procs.pending_exiters = NULL; + erts_smp_runq_unlock(rq); + handle_pending_exiters(pnd_xtrs); + erts_smp_runq_lock(rq); } -#endif if (rq->check_balance_reds <= 0) check_balance(rq); @@ -7702,6 +7696,7 @@ Process *schedule(Process *p, int calls) flags = ERTS_RUNQ_FLGS_GET_NOB(rq); if (flags & ERTS_RUNQ_FLG_SUSPENDED) { non_empty_runq(rq); + flags |= ERTS_RUNQ_FLG_NONEMPTY; goto continue_check_activities_to_run_known_flags; } } |