Skip to content

Commit cebccf6

Browse files
committed
issue #549 / [stream-refactor]: fix close/poller deregister crash on OSX
See source comment.
1 parent 19b259a commit cebccf6

File tree

1 file changed

+8
-3
lines changed

1 file changed

+8
-3
lines changed

mitogen/core.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1628,12 +1628,17 @@ def on_shutdown(self, broker):
16281628
self.stream.on_disconnect(broker)
16291629

16301630
def on_disconnect(self, broker):
1631+
# Normally both sides an FD, so it is important that tranmit_side is
1632+
# deregistered from Poller before closing the receive side, as pollers
1633+
# like epoll and kqueue unregister all events on FD close, causing
1634+
# subsequent attempt to unregister the transmit side to fail.
16311635
LOG.debug('%r: disconnecting', self)
1632-
if self.stream.receive_side:
1633-
broker.stop_receive(self.stream)
1634-
self.stream.receive_side.close()
1636+
broker.stop_receive(self.stream)
16351637
if self.stream.transmit_side:
16361638
broker._stop_transmit(self.stream)
1639+
1640+
self.stream.receive_side.close()
1641+
if self.stream.transmit_side:
16371642
self.stream.transmit_side.close()
16381643

16391644

0 commit comments

Comments
 (0)