summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Stanek <dstanek@dstanek.com>2009-10-21 14:31:37 -0400
committerDavid Stanek <dstanek@dstanek.com>2009-10-21 14:31:37 -0400
commit066a539a1b65b0f6cf221a96faec9ed3492db80c (patch)
tree51b603cce23e42c6a433be9ee77b07c7b2869dd5
parent3adf17edbd4a278ba7e02eaed4dc555d9729608b (diff)
downloadflup-066a539a1b65b0f6cf221a96faec9ed3492db80c.tar.gz
fixed an issue where sending the parent a USR1 when a child is in an infinite loop crashes the parent.
-rw-r--r--flup/server/preforkserver.py5
1 files changed, 4 insertions, 1 deletions
diff --git a/flup/server/preforkserver.py b/flup/server/preforkserver.py
index 4c50e8c..7e5b70f 100644
--- a/flup/server/preforkserver.py
+++ b/flup/server/preforkserver.py
@@ -146,7 +146,9 @@ class PreforkServer(object):
# children that need to die.
timeout = 2
- w = (time.time() > self._last_purge + 10) and self._children_to_purge or []
+ w = []
+ if (time.time() > self._last_purge + 10):
+ w = [x for x in self._children_to_purge if x.fileno() != -1]
try:
r, w, e = select.select(r, w, [], timeout)
except select.error, e:
@@ -287,6 +289,7 @@ class PreforkServer(object):
if self._children.has_key(pid): # Sanity check.
if self._children[pid]['file'] is not None:
self._children[pid]['file'].close()
+ self._children[pid]['file'] = None
del self._children[pid]
def _spawnChild(self, sock):