in src/output.rs [87:118]
fn new_for_writer<F, W>(acquire_writer: F) -> anyhow::Result<Self>
where
F: Fn() -> W + Send + 'static,
W: Write,
{
let (sender, receiver) = bounded::<Vec<u8>>(1);
let (error_sender, errors) = unbounded::<io::Error>();
let handle = std::thread::Builder::new()
.name("superconsole-io".to_owned())
.spawn(move || {
for frame in receiver.into_iter() {
let mut writer = acquire_writer();
match writer.write_all(&frame).and_then(|()| writer.flush()) {
Ok(()) => {}
Err(e) => {
// This can only fail if the sender disconnected, in which case they'll
// stop sending us data momentarily, so ignore the failure.
let _ignored = error_sender.try_send(e);
}
}
}
})
.context("Error spawning Superconsole I/O thread")?;
Ok(Self {
sender,
errors,
handle,
})
}