diff options
author | Rickard Green <[email protected]> | 2011-09-21 23:13:06 +0200 |
---|---|---|
committer | Rickard Green <[email protected]> | 2011-09-22 09:52:58 +0200 |
commit | 4a68d3ebd54342ed72300a957883ed73957054af (patch) | |
tree | 3e3bef555c04ce59b3909bc19856d16b241f14bf | |
parent | 4a5a75811e2cd590b5c94f71864a5245fd511ccf (diff) | |
download | otp-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.c | 7 |
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 |