From 50b841834a67fad21272df1de8711bf3903fa593 Mon Sep 17 00:00:00 2001 From: donovan Date: Mon, 21 Jul 2008 17:34:41 -0700 Subject: [PATCH] Use a call_after in the signal to possibly avoid a race condition. Patch by Kieran Holland, thanks\! --- eventlet/processes.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/eventlet/processes.py b/eventlet/processes.py index a439af1..b9bb59a 100644 --- a/eventlet/processes.py +++ b/eventlet/processes.py @@ -42,7 +42,7 @@ CHILD_PIDS = [] CHILD_EVENTS = {} -def sig_child(signal, frame): +def wait_on_children(): for child_pid in CHILD_PIDS: try: pid, code = util.__original_waitpid__(child_pid, os.WNOHANG) @@ -65,6 +65,11 @@ def sig_child(signal, frame): # Already dead; signal, but assume success event = CHILD_EVENTS.pop(child_pid) event.send(0) + + +def sig_child(signal, frame): + from eventlet import api + api.call_after(0, wait_on_children) signal.signal(signal.SIGCHLD, sig_child)