Silently drain write queue when write error happens during recording

This commit is contained in:
Marcin Kulik
2023-04-15 17:22:25 +02:00
parent 297e8913a2
commit ac8f7edb51
2 changed files with 17 additions and 10 deletions

View File

@@ -36,8 +36,11 @@ class file_writer:
self.on_error("Output pipe reopened successfully") self.on_error("Output pipe reopened successfully")
self.file.write(data) # type: ignore self.file.write(data) # type: ignore
else: else:
self.on_error("Output pipe broken") self.on_error("Output pipe broken, recording suspended")
raise e raise e
except IOError as e:
self.on_error("Write error, recording suspended")
raise e
def noop(_: Any) -> None: def noop(_: Any) -> None:

View File

@@ -132,16 +132,20 @@ class async_writer(async_worker):
self.enqueue([ts, "o", data]) self.enqueue([ts, "o", data])
def run(self) -> None: def run(self) -> None:
with self.writer as w: try:
event: Tuple[float, str, Any] with self.writer as w:
for event in iter(self.queue.get, None): event: Tuple[float, str, Any]
assert event is not None for event in iter(self.queue.get, None):
ts, etype, data = event assert event is not None
ts, etype, data = event
if etype == "o": if etype == "o":
w.write_stdout(self.time_offset + ts, data) w.write_stdout(self.time_offset + ts, data)
elif etype == "i": elif etype == "i":
w.write_stdin(self.time_offset + ts, data) w.write_stdin(self.time_offset + ts, data)
except IOError:
for event in iter(self.queue.get, None):
pass
class async_notifier(async_worker): class async_notifier(async_worker):