Issue #21645: Add debug code to analyze a failure on FreeBSD 9

This commit is contained in:
Victor Stinner 2014-07-14 21:29:23 +02:00
parent daded80283
commit 24f2a5093f

View file

@ -609,25 +609,41 @@ os.close(fd)
rfd, wfd = os.pipe() rfd, wfd = os.pipe()
args = [sys.executable, '-c', code, str(wfd)] args = [sys.executable, '-c', code, str(wfd)]
pipe = open(rfd, 'rb', 0) # FIXME: Debug code for issue #21645
reader = asyncio.StreamReader(loop=self.loop, limit=1) import logging
protocol = asyncio.StreamReaderProtocol(reader, loop=self.loop) self.loop.set_debug(True)
transport, _ = self.loop.run_until_complete( logger = logging.getLogger('asyncio')
self.loop.connect_read_pipe(lambda: protocol, pipe)) log_level = logger.level
watcher = asyncio.SafeChildWatcher()
watcher.attach_loop(self.loop)
try: try:
asyncio.set_child_watcher(watcher) log_handler = logging.StreamHandler(sys.stderr)
proc = self.loop.run_until_complete( logger.addHandler(log_handler)
asyncio.create_subprocess_exec(*args, pass_fds={wfd}, loop=self.loop)) logger.setLevel(logging.DEBUG)
self.loop.run_until_complete(proc.wait()) # FIXME: Debug code for issue #21645 ---
finally:
asyncio.set_child_watcher(None)
os.close(wfd) pipe = open(rfd, 'rb', 0)
data = self.loop.run_until_complete(reader.read(-1)) reader = asyncio.StreamReader(loop=self.loop, limit=1)
self.assertEqual(data, b'data') protocol = asyncio.StreamReaderProtocol(reader, loop=self.loop)
transport, _ = self.loop.run_until_complete(
self.loop.connect_read_pipe(lambda: protocol, pipe))
watcher = asyncio.SafeChildWatcher()
watcher.attach_loop(self.loop)
try:
asyncio.set_child_watcher(watcher)
proc = self.loop.run_until_complete(
asyncio.create_subprocess_exec(*args, pass_fds={wfd}, loop=self.loop))
self.loop.run_until_complete(proc.wait())
finally:
asyncio.set_child_watcher(None)
os.close(wfd)
data = self.loop.run_until_complete(reader.read(-1))
self.assertEqual(data, b'data')
finally:
# FIXME: Debug code for issue #21645
logger.removeHandler(log_handler)
logger.setLevel(log_level)
# FIXME: Debug code for issue #21645 ---
if __name__ == '__main__': if __name__ == '__main__':