aboutsummaryrefslogtreecommitdiffstats
path: root/erts/emulator/beam/erl_process.c
diff options
context:
space:
mode:
authorRickard Green <[email protected]>2017-04-12 11:33:01 +0200
committerRickard Green <[email protected]>2017-04-12 11:33:01 +0200
commit8e2e8a5f813874134a601db551f2b4d5bb0abec5 (patch)
tree95db342233895f432091f30c58ae87c29eaae318 /erts/emulator/beam/erl_process.c
parent85c956da8303096bba8c5c2307aa07d6e007f620 (diff)
parentb5cd902c38687b9578d2222ace7956fdb26c9401 (diff)
downloadotp-8e2e8a5f813874134a601db551f2b4d5bb0abec5.tar.gz
otp-8e2e8a5f813874134a601db551f2b4d5bb0abec5.tar.bz2
otp-8e2e8a5f813874134a601db551f2b4d5bb0abec5.zip
Merge branch 'rickard/ds-fixes'
* rickard/ds-fixes: Fix dirty GC implementation Fix multi-scheduling with only one normal scheduler Fix +SDPcpu
Diffstat (limited to 'erts/emulator/beam/erl_process.c')
-rw-r--r--erts/emulator/beam/erl_process.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/erts/emulator/beam/erl_process.c b/erts/emulator/beam/erl_process.c
index 11a1ce625b..6b5b64993f 100644
--- a/erts/emulator/beam/erl_process.c
+++ b/erts/emulator/beam/erl_process.c
@@ -8531,8 +8531,9 @@ erts_block_multi_scheduling(Process *p, ErtsProcLocks plocks, int on, int normal
p->flags |= have_blckd_flg;
goto wait_until_msb;
}
- else if (msbp->blckrs) {
- ASSERT(msbp->ongoing);
+ else if (msbp->blckrs || (normal && erts_no_schedulers == 1)) {
+ ASSERT(!msbp->blckrs || msbp->ongoing);
+ msbp->ongoing = 1;
plp = proclist_create(p);
erts_proclist_store_last(&msbp->blckrs, plp);
p->flags |= have_blckd_flg;
@@ -8546,7 +8547,7 @@ erts_block_multi_scheduling(Process *p, ErtsProcLocks plocks, int on, int normal
else
res = ERTS_SCHDLR_SSPND_DONE_NMSCHED_BLOCKED;
}
- else {
+ else {
int online = (int) schdlr_sspnd_get_nscheds(&schdlr_sspnd.online,
ERTS_SCHED_NORMAL);
ASSERT(!msbp->ongoing);