diff options
author | David Stanek <dstanek@dstanek.com> | 2009-10-21 14:31:37 -0400 |
---|---|---|
committer | David Stanek <dstanek@dstanek.com> | 2009-10-21 14:31:37 -0400 |
commit | 066a539a1b65b0f6cf221a96faec9ed3492db80c (patch) | |
tree | 51b603cce23e42c6a433be9ee77b07c7b2869dd5 | |
parent | 3adf17edbd4a278ba7e02eaed4dc555d9729608b (diff) | |
download | flup-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.py | 5 |
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): |