From 3ee9ff7f4d5b27c77c75e246d4ac8d642049b02f Mon Sep 17 00:00:00 2001 From: Solly Ross Date: Thu, 30 Jan 2014 17:24:42 -0500 Subject: [PATCH] Work around lack of SIGCHLD on Windows This only enables the SIGCHLD handler if SIGCHLD exists, such that platforms without SIGCHLD (such as windows) can still run websockify natively. See #108 --- websockify/websocket.py | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/websockify/websocket.py b/websockify/websocket.py index 889bc40..b891c52 100644 --- a/websockify/websocket.py +++ b/websockify/websocket.py @@ -913,17 +913,21 @@ class WebSocketServer(object): original_signals = { signal.SIGINT: signal.getsignal(signal.SIGINT), signal.SIGTERM: signal.getsignal(signal.SIGTERM), - signal.SIGCHLD: signal.getsignal(signal.SIGCHLD), } + if getattr(signal, 'SIGCHLD', None) is not None: + original_signals[signal.SIGCHLD] = signal.getsignal(signal.SIGCHLD), + signal.signal(signal.SIGINT, self.do_SIGINT) signal.signal(signal.SIGTERM, self.do_SIGTERM) - if not multiprocessing: - # os.fork() (python 2.4) child reaper - signal.signal(signal.SIGCHLD, self.fallback_SIGCHLD) - else: - # make sure that _cleanup is called when children die - # by calling active_children on SIGCHLD - signal.signal(signal.SIGCHLD, self.multiprocessing_SIGCHLD) + + if getattr(signal, 'SIGCHLD', None) is not None: + if not multiprocessing: + # os.fork() (python 2.4) child reaper + signal.signal(signal.SIGCHLD, self.fallback_SIGCHLD) + else: + # make sure that _cleanup is called when children die + # by calling active_children on SIGCHLD + signal.signal(signal.SIGCHLD, self.multiprocessing_SIGCHLD) last_active_time = self.launch_time try: