Use a call_after in the signal to possibly avoid a race condition. Patch by Kieran Holland, thanks\!
This commit is contained in:
@@ -42,7 +42,7 @@ CHILD_PIDS = []
|
|||||||
CHILD_EVENTS = {}
|
CHILD_EVENTS = {}
|
||||||
|
|
||||||
|
|
||||||
def sig_child(signal, frame):
|
def wait_on_children():
|
||||||
for child_pid in CHILD_PIDS:
|
for child_pid in CHILD_PIDS:
|
||||||
try:
|
try:
|
||||||
pid, code = util.__original_waitpid__(child_pid, os.WNOHANG)
|
pid, code = util.__original_waitpid__(child_pid, os.WNOHANG)
|
||||||
@@ -65,6 +65,11 @@ def sig_child(signal, frame):
|
|||||||
# Already dead; signal, but assume success
|
# Already dead; signal, but assume success
|
||||||
event = CHILD_EVENTS.pop(child_pid)
|
event = CHILD_EVENTS.pop(child_pid)
|
||||||
event.send(0)
|
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)
|
signal.signal(signal.SIGCHLD, sig_child)
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user