aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRickard Green <[email protected]>2011-09-21 23:13:06 +0200
committerRickard Green <[email protected]>2011-09-22 09:52:58 +0200
commit4a68d3ebd54342ed72300a957883ed73957054af (patch)
tree3e3bef555c04ce59b3909bc19856d16b241f14bf
parent4a5a75811e2cd590b5c94f71864a5245fd511ccf (diff)
downloadotp-4a68d3ebd54342ed72300a957883ed73957054af.tar.gz
otp-4a68d3ebd54342ed72300a957883ed73957054af.tar.bz2
otp-4a68d3ebd54342ed72300a957883ed73957054af.zip
Fix lost wakeup of scheduler when enqueuing auxiliary work
When auxiliary work was enqueued on a scheduler, the wakeup of the scheduler in order to handle this work could be lost. Wakeups in order to handle ordinary work were not effected by this bug. The bug only effected runtime systems with SMP support as follows: * Deallocation of some ETS data structures could be delayed. * On Linux systems not using the NPTL thread library (typically ancient systems with kernel versions prior to 2.6) and Windows systems, the {Port, {exit_status, Status}} message from a terminating port program could be delayed. That is, it only effected port programs which had been started by passing exit_status as an option to open_port/2.
-rw-r--r--erts/emulator/beam/erl_process.c7
1 files changed, 0 insertions, 7 deletions
diff --git a/erts/emulator/beam/erl_process.c b/erts/emulator/beam/erl_process.c
index 2704359a8f..8422d1378c 100644
--- a/erts/emulator/beam/erl_process.c
+++ b/erts/emulator/beam/erl_process.c
@@ -1151,13 +1151,6 @@ scheduler_wait(int *fcalls, ErtsSchedulerData *esdp, ErtsRunQueue *rq)
ASSERT(!(flgs & ERTS_SSI_FLG_SLEEPING));
goto sys_woken;
}
- if (!(flgs & ERTS_SSI_FLG_SLEEPING)) {
- flgs = sched_prep_cont_spin_wait(ssi);
- if (!(flgs & ERTS_SSI_FLG_WAITING)) {
- ASSERT(!(flgs & ERTS_SSI_FLG_SLEEPING));
- goto sys_woken;
- }
- }
/*
* If we got new I/O tasks we aren't allowed to