Issue #18762: Print debug info on failure to create new forkserver process.

Also modify test code to hopefully avoid deadlock on failure.
This commit is contained in:
Richard Oudkerk 2013-08-21 19:45:19 +01:00
parent 6acbe2aaa3
commit a01fb39877
2 changed files with 19 additions and 2 deletions

View File

@ -66,6 +66,21 @@ def connect_to_new_process(fds):
try:
reduction.sendfds(client, allfds)
return parent_r, parent_w
except OSError:
# XXX This is debugging info for Issue #18762
import fcntl
L = []
for fd in allfds:
try:
flags = fcntl.fcntl(fd, fcntl.F_GETFL)
except OSError as e:
L.append((fd, e))
else:
L.append((fd, flags))
print('*** connect_to_new_process: %r' % L, file=sys.stderr)
os.close(parent_r)
os.close(parent_w)
raise
except:
os.close(parent_r)
os.close(parent_w)

View File

@ -3386,7 +3386,8 @@ class TestForkAwareThreadLock(unittest.TestCase):
if n > 1:
p = multiprocessing.Process(target=cls.child, args=(n-1, conn))
p.start()
p.join()
conn.close()
p.join(timeout=5)
else:
conn.send(len(util._afterfork_registry))
conn.close()
@ -3397,8 +3398,9 @@ class TestForkAwareThreadLock(unittest.TestCase):
old_size = len(util._afterfork_registry)
p = multiprocessing.Process(target=self.child, args=(5, w))
p.start()
w.close()
new_size = r.recv()
p.join()
p.join(timeout=5)
self.assertLessEqual(new_size, old_size)
#