fix: break server reader threads on read error
Some checks failed
Continuous integration / test (push) Has been cancelled

This commit is contained in:
Timothy Z. 2026-05-10 12:32:20 +00:00
parent bbbe882faf
commit 4c92d6658b

View file

@ -85,10 +85,14 @@ impl StremioServer {
let http_endpoint = String::new(); let http_endpoint = String::new();
loop { loop {
let mut buffer = [0; SRV_BUFFER_SIZE]; let mut buffer = [0; SRV_BUFFER_SIZE];
let on = stdout.read(&mut buffer[..]).unwrap_or(!0); let on = match stdout.read(&mut buffer[..]) {
if on > buffer.len() { Ok(0) => break,
continue; Ok(n) => n,
} Err(err) => {
eprintln!("server stdout read error: {err}");
break;
}
};
std::io::stdout().write_all(&buffer).ok(); std::io::stdout().write_all(&buffer).ok();
let string_data = String::from_utf8_lossy(&buffer[..on]); let string_data = String::from_utf8_lossy(&buffer[..on]);
{ {
@ -116,10 +120,6 @@ impl StremioServer {
.collect::<Vec<&str>>() .collect::<Vec<&str>>()
.join("\n"); .join("\n");
}; };
if on == 0 {
// Server terminated
break;
}
} }
}); });
@ -128,10 +128,14 @@ impl StremioServer {
let err_thread = thread::spawn(move || { let err_thread = thread::spawn(move || {
let mut buffer = [0; SRV_BUFFER_SIZE]; let mut buffer = [0; SRV_BUFFER_SIZE];
loop { loop {
let en = stderr.read(&mut buffer[..]).unwrap_or(!0); let en = match stderr.read(&mut buffer[..]) {
if en > buffer.len() { Ok(0) => break,
continue; Ok(n) => n,
} Err(err) => {
eprintln!("server stderr read error: {err}");
break;
}
};
std::io::stderr().write_all(&buffer).ok(); std::io::stderr().write_all(&buffer).ok();
let string_data = String::from_utf8_lossy(&buffer[..en]); let string_data = String::from_utf8_lossy(&buffer[..en]);
// eprint!("{:?}", &buffer); // eprint!("{:?}", &buffer);
@ -148,10 +152,6 @@ impl StremioServer {
.collect::<Vec<&str>>() .collect::<Vec<&str>>()
.join("\n"); .join("\n");
}; };
if en == 0 {
// Server terminated
break;
}
} }
}); });
out_thread.join().ok(); out_thread.join().ok();