Fix unblock race condition randomly leading to deadlocks
This commit is contained in:
parent
ca613644ac
commit
dbe5b10482
@ -34,11 +34,13 @@ class PipeReaderThread(Thread):
|
||||
return open(self._pipe_path, 'rb')
|
||||
|
||||
def stop(self):
|
||||
self.unblock()
|
||||
self._unblock()
|
||||
self.join()
|
||||
|
||||
def unblock(self):
|
||||
with suppress(OSError):
|
||||
fd = osopen(self._pipe_path, O_WRONLY | O_NONBLOCK)
|
||||
write(fd, self.stop_sequence)
|
||||
close(fd)
|
||||
def _unblock(self):
|
||||
while True:
|
||||
with suppress(OSError):
|
||||
fd = osopen(self._pipe_path, O_WRONLY | O_NONBLOCK)
|
||||
write(fd, self.stop_sequence)
|
||||
close(fd)
|
||||
break
|
||||
|
@ -39,11 +39,13 @@ class PipeWriterThread(Thread):
|
||||
return open(self._pipe_path, 'wb')
|
||||
|
||||
def stop(self):
|
||||
self.unblock()
|
||||
self._unblock()
|
||||
self.join()
|
||||
|
||||
def unblock(self):
|
||||
self._write_queue.push_front(None)
|
||||
with suppress(OSError):
|
||||
fd = osopen(self._pipe_path, O_RDONLY | O_NONBLOCK)
|
||||
close(fd)
|
||||
def _unblock(self):
|
||||
while True:
|
||||
with suppress(OSError):
|
||||
fd = osopen(self._pipe_path, O_RDONLY | O_NONBLOCK)
|
||||
self._write_queue.push_front(None)
|
||||
close(fd)
|
||||
break
|
||||
|
Loading…
Reference in New Issue
Block a user