From f7e288fa2599a93d33e605cb044b71cb0eecd27f Mon Sep 17 00:00:00 2001 From: David Wilson Date: Thu, 19 Jul 2018 15:12:54 -0400 Subject: [PATCH] core: fd 0/1 were accidently made non-blocking. This breaks regular code. Triggered by a huge pprint() in the child to stdout. --- mitogen/core.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/mitogen/core.py b/mitogen/core.py index 6f536ec8..c0b864f7 100644 --- a/mitogen/core.py +++ b/mitogen/core.py @@ -851,7 +851,7 @@ class LogHandler(logging.Handler): class Side(object): _fork_refs = weakref.WeakValueDictionary() - def __init__(self, stream, fd, cloexec=True, keep_alive=True): + def __init__(self, stream, fd, cloexec=True, keep_alive=True, blocking=False): self.stream = stream self.fd = fd self.closed = False @@ -859,7 +859,8 @@ class Side(object): self._fork_refs[id(self)] = self if cloexec: set_cloexec(fd) - set_nonblock(fd) + if not blocking: + set_nonblock(fd) def __repr__(self): return '' % (self.stream, self.fd) @@ -1520,7 +1521,7 @@ class IoLogger(BasicStream): set_cloexec(self._wsock.fileno()) self.receive_side = Side(self, self._rsock.fileno()) - self.transmit_side = Side(self, dest_fd, cloexec=False) + self.transmit_side = Side(self, dest_fd, cloexec=False, blocking=True) self._broker.start_receive(self) def __repr__(self):