issue #144: teach Select() to close its latch

Causes all threads sleeping on the select to wake.
This commit is contained in:
David Wilson 2018-03-18 19:02:11 +05:45
parent 8aada2646c
commit 4f361be7e7
2 changed files with 14 additions and 3 deletions

View File

@ -159,6 +159,11 @@ contexts.
:return:
:py:class:`mitogen.core.Message`
:raises mitogen.core.TimeoutError:
Timeout was reached.
:raises mitogen.core.LatchError:
:py:meth:`close` has been called, and the underlying latch is no
longer valid.
.. py:method:: __bool__ ()
@ -166,9 +171,14 @@ contexts.
.. py:method:: close ()
Remove the select's notifier function from each registered receiver.
Necessary to prevent memory leaks in long-running receivers. This is
called automatically when the Python :keyword:`with` statement is used.
Remove the select's notifier function from each registered receiver,
mark the associated latch as closed, and cause any thread currently
sleeping in :py:meth:`get` to be woken with
:py:class:`mitogen.core.LatchError`.
This is necessary to prevent memory leaks in long-running receivers. It
is called automatically when the Python :keyword:`with` statement is
used.
.. py:method:: empty ()

View File

@ -236,6 +236,7 @@ class Select(object):
def close(self):
for recv in self._receivers[:]:
self.remove(recv)
self._latch.close()
def empty(self):
return self._latch.empty()