Really fix deadlock causing race condition

This commit is contained in:
Kristóf Tóth 2019-05-03 22:00:23 +02:00
parent 97de6a0175
commit aa7eea6242
2 changed files with 12 additions and 14 deletions

View File

@ -34,13 +34,12 @@ class PipeReaderThread(Thread):
return open(self._pipe_path, 'rb')
def stop(self):
self._unblock()
while self.is_alive():
self._unblock()
self.join()
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
with suppress(OSError):
fd = osopen(self._pipe_path, O_WRONLY | O_NONBLOCK)
write(fd, self.stop_sequence)
close(fd)

View File

@ -39,13 +39,12 @@ class PipeWriterThread(Thread):
return open(self._pipe_path, 'wb')
def stop(self):
self._unblock()
while self.is_alive():
self._unblock()
self.join()
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
with suppress(OSError):
fd = osopen(self._pipe_path, O_RDONLY | O_NONBLOCK)
self._write_queue.push_front(None)
close(fd)