summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAllan Saddi <allan@saddi.com>2006-01-05 20:42:02 +0000
committerAllan Saddi <allan@saddi.com>2006-01-05 20:42:02 +0000
commit6f8f99d9f8724c7536216eb095a0ca1f0e6f3633 (patch)
tree26f439d8f19daf9c65167b14d8e8d77d3d1c6cb1
parent8e6316ad62fafe56ff0776ce7718e9b293f61349 (diff)
downloadflup-6f8f99d9f8724c7536216eb095a0ca1f0e6f3633.tar.gz
Improve Windows compatibility by conditionally installing
SIGHUP handler.
-rw-r--r--ChangeLog6
-rw-r--r--flup/server/preforkserver.py18
-rw-r--r--flup/server/threadedserver.py16
3 files changed, 28 insertions, 12 deletions
diff --git a/ChangeLog b/ChangeLog
index 5697c5f..4505af8 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2006-01-05 Allan Saddi <asaddi@kalahari.flup.org>
+
+ * Improve Windows compatibility by conditionally installing
+ SIGHUP handler. Thanks to Brad Miller for pointing out the
+ problem and providing a fix.
+
2005-12-19 Allan Saddi <asaddi@kalahari.flup.org>
* Fix socket leak in eunuchs socketpair() wrapper. Thanks to
diff --git a/flup/server/preforkserver.py b/flup/server/preforkserver.py
index d8c32a0..795ff20 100644
--- a/flup/server/preforkserver.py
+++ b/flup/server/preforkserver.py
@@ -350,13 +350,17 @@ class PreforkServer(object):
pass
def _installSignalHandlers(self):
- """Installs signal handlers."""
- self._oldSIGs = [(x,signal.getsignal(x)) for x in
- (signal.SIGHUP, signal.SIGINT, signal.SIGTERM,
- signal.SIGCHLD)]
- signal.signal(signal.SIGHUP, self._hupHandler)
- signal.signal(signal.SIGINT, self._intHandler)
- signal.signal(signal.SIGTERM, self._intHandler)
+ supportedSignals = [signal.SIGINT, signal.SIGTERM]
+ if hasattr(signal, 'SIGHUP'):
+ supportedSignals.append(signal.SIGHUP)
+
+ self._oldSIGs = [(x,signal.getsignal(x)) for x in supportedSignals]
+
+ for sig in supportedSignals:
+ if hasattr(signal, 'SIGHUP') and sig == signal.SIGHUP:
+ signal.signal(sig, self._hupHandler)
+ else:
+ signal.signal(sig, self._intHandler)
def _restoreSignalHandlers(self):
"""Restores previous signal handlers."""
diff --git a/flup/server/threadedserver.py b/flup/server/threadedserver.py
index a61db19..60c1bfa 100644
--- a/flup/server/threadedserver.py
+++ b/flup/server/threadedserver.py
@@ -122,11 +122,17 @@ class ThreadedServer(object):
self._keepGoing = False
def _installSignalHandlers(self):
- self._oldSIGs = [(x,signal.getsignal(x)) for x in
- (signal.SIGHUP, signal.SIGINT, signal.SIGTERM)]
- signal.signal(signal.SIGHUP, self._hupHandler)
- signal.signal(signal.SIGINT, self._intHandler)
- signal.signal(signal.SIGTERM, self._intHandler)
+ supportedSignals = [signal.SIGINT, signal.SIGTERM]
+ if hasattr(signal, 'SIGHUP'):
+ supportedSignals.append(signal.SIGHUP)
+
+ self._oldSIGs = [(x,signal.getsignal(x)) for x in supportedSignals]
+
+ for sig in supportedSignals:
+ if hasattr(signal, 'SIGHUP') and sig == signal.SIGHUP:
+ signal.signal(sig, self._hupHandler)
+ else:
+ signal.signal(sig, self._intHandler)
def _restoreSignalHandlers(self):
for signum,handler in self._oldSIGs: