Really fix deadlock causing race condition
This commit is contained in:
		| @@ -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) | ||||
|   | ||||
| @@ -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) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user