From 4a68d3ebd54342ed72300a957883ed73957054af Mon Sep 17 00:00:00 2001
From: Rickard Green <rickard@erlang.org>
Date: Wed, 21 Sep 2011 23:13:06 +0200
Subject: 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.
---
 erts/emulator/beam/erl_process.c | 7 -------
 1 file changed, 7 deletions(-)

(limited to 'erts')

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
-- 
cgit v1.2.3