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.file.write(data) # type: ignore
else:
self.on_error("Output pipe broken")
self.on_error("Output pipe broken, recording suspended")
raise e
except IOError as e:
self.on_error("Write error, recording suspended")
raise e
def noop(_: Any) -> None:

View File

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