summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJonathan Slenders <jonathan@slenders.be>2016-11-07 20:57:33 +0100
committerJonathan Slenders <jonathan@slenders.be>2016-11-07 20:57:33 +0100
commit144f9c28cf54eaee437197c5dde5b2c6dc7ae385 (patch)
treecc4761bc53b3a3ff5a70b20c4e63f4d739cc0622
parent9b6cd5adfc6892e0bf9251366e03041a45885430 (diff)
Handle race condition in eventloop/posix.py.
-rw-r--r--prompt_toolkit/eventloop/posix.py9
1 files changed, 8 insertions, 1 deletions
diff --git a/prompt_toolkit/eventloop/posix.py b/prompt_toolkit/eventloop/posix.py
index 0262f4d6..9ca3fc93 100644
--- a/prompt_toolkit/eventloop/posix.py
+++ b/prompt_toolkit/eventloop/posix.py
@@ -244,7 +244,14 @@ class PosixEventLoop(EventLoop):
self._calls_from_executor.append((callback, _max_postpone_until))
if self._schedule_pipe:
- os.write(self._schedule_pipe[1], b'x')
+ try:
+ os.write(self._schedule_pipe[1], b'x')
+ except (AttributeError, IndexError, OSError):
+ # Handle race condition. We're in a different thread.
+ # - `_schedule_pipe` could have become None in the meantime.
+ # - We catch `OSError` (actually BrokenPipeError), because the
+ # main thread could have closed the pipe already.
+ pass
def stop(self):
"""