diff options
author | Steve Vinoski <[email protected]> | 2016-02-21 20:32:40 -0500 |
---|---|---|
committer | Steve Vinoski <[email protected]> | 2016-02-21 20:32:40 -0500 |
commit | 9f60b6ea108b625affe5aef745443c8422c8d64f (patch) | |
tree | bd393b07696a5eff428ef9005d3eaa7bfede55b9 /erts | |
parent | 33f8fe899ec052ab0a33566f7e9e92fadf3f0a68 (diff) | |
download | otp-9f60b6ea108b625affe5aef745443c8422c8d64f.tar.gz otp-9f60b6ea108b625affe5aef745443c8422c8d64f.tar.bz2 otp-9f60b6ea108b625affe5aef745443c8422c8d64f.zip |
Skip run queue lock check for dirty schedulers
The wake_scheduler function asserts that the run queue is not locked,
but this assertion sometimes fails for dirty schedulers (in January
2016 a user in erlang-questions reported a dirty schedulers problem
related to this). After discussing it with Rickard, we decided
modifying the assertion was the most practical way to address the
problem.
Diffstat (limited to 'erts')
-rw-r--r-- | erts/emulator/beam/erl_process.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/erts/emulator/beam/erl_process.c b/erts/emulator/beam/erl_process.c index b7499c5b5a..fd29c22810 100644 --- a/erts/emulator/beam/erl_process.c +++ b/erts/emulator/beam/erl_process.c @@ -3250,7 +3250,8 @@ wake_scheduler(ErtsRunQueue *rq) * so all code *should* handle this without having * the lock on the run queue. */ - ERTS_SMP_LC_ASSERT(!erts_smp_lc_runq_is_locked(rq)); + ERTS_SMP_LC_ASSERT(!erts_smp_lc_runq_is_locked(rq) + || ERTS_RUNQ_IX_IS_DIRTY(rq->ix)); ssi = rq->scheduler->ssi; |