[New-bugs-announce] [issue1183] race in SocketServer.ForkingMixIn.collect_children
David Ripton
report at bugs.python.org
Thu Sep 20 21:35:42 CEST 2007
New submission from David Ripton:
CentOS Linux 5, Python 2.4.3 (but code appears unchanged in 2.5 and
trunk, so I don't believe this bug has already been fixed)
We have an xmlrpc server that subclasses DocXMLRPCServer.DocXMLRPCServer
and SocketServer.ForkingMixIn. Under load, it sometimes crashes with an
error in SocketServer.ForkingMixIn.collect_children
The bug is that collect_children calls os.waitpid with pid 0, so it
waits for any child. But then it assumes that the pid found was in the
list self.active_children, and attempts to remove it from that list
without a try block. However, another call to collect_children could
have already removed it, so we get "ValueError: list.remove(x): x not in
list"
The fix is just adding a try/except block around the attempt to remove
pid from self.active children.
diff -u SocketServer.py /tmp/SocketServer.py
--- SocketServer.py 2007-08-27 10:52:24.000000000 -0400
+++ /tmp/SocketServer.py 2007-09-20 15:34:00.000000000 -0400
@@ -421,7 +421,10 @@
except os.error:
pid = None
if not pid: break
- self.active_children.remove(pid)
+ try:
+ self.active_children.remove(pid)
+ except ValueError:
+ pass
def process_request(self, request, client_address):
"""Fork a new subprocess to process the request."""
----------
components: Library (Lib)
messages: 56065
nosy: dripton
severity: normal
status: open
title: race in SocketServer.ForkingMixIn.collect_children
type: crash
versions: Python 2.4
__________________________________
Tracker <report at bugs.python.org>
<http://bugs.python.org/issue1183>
__________________________________
More information about the New-bugs-announce
mailing list