Fix bug where select() wouldn't block on linux (EOF)
This commit is contained in:
parent
d4a6fe8f49
commit
1bd64c368c
@ -1,6 +1,6 @@
|
||||
# pylint: disable=redefined-builtin,too-many-instance-attributes
|
||||
from contextlib import contextmanager
|
||||
from os import O_NONBLOCK, O_RDONLY, open, fdopen, close, write, pipe
|
||||
from os import O_NONBLOCK, O_RDONLY, O_WRONLY, open, fdopen, close, write, pipe
|
||||
from threading import Thread
|
||||
from select import select
|
||||
|
||||
@ -12,7 +12,7 @@ class PipeReaderThread(Thread):
|
||||
super().__init__(daemon=True)
|
||||
self._message_handler = message_handler
|
||||
self._pipe_path = pipe_path
|
||||
self._read_fd, self._read_fp = None, None
|
||||
self._read_fd, self._read_fp, self._prevent_eof_fd = None, None, None
|
||||
self._stop_signal_rfd, self._stop_signal_wfd = pipe()
|
||||
self._msg_buf = b''
|
||||
self._stop_event = stop_event
|
||||
@ -35,8 +35,10 @@ class PipeReaderThread(Thread):
|
||||
def _open(self):
|
||||
self._read_fd = open(self._pipe_path, O_RDONLY | O_NONBLOCK)
|
||||
self._read_fp = fdopen(self._read_fd, 'rb')
|
||||
self._prevent_eof_fd = open(self._pipe_path, O_WRONLY)
|
||||
yield
|
||||
self._read_fp.close()
|
||||
close(self._prevent_eof_fd)
|
||||
close(self._stop_signal_rfd)
|
||||
close(self._stop_signal_wfd)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user