aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHimbeerserverDE <himbeerserverde@gmail.com>2023-11-18 14:52:06 +0100
committerHimbeerserverDE <himbeerserverde@gmail.com>2023-11-18 14:52:28 +0100
commitdc131fd1d636e0c203e7b12b0801f741d234539d (patch)
tree9ac01eebdefb581bcf7fd2ceb9d8ed7ee3b9a7fd
parent692becaf4cc4196f7925b37bd16bf353d010fe65 (diff)
fix infinite semi-empty loop on closed service stdout or stderr
Fixes enormous CPU load that builds up quickly.
-rw-r--r--src/main.rs10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/main.rs b/src/main.rs
index 04fd416..1579f3b 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -147,7 +147,10 @@ fn log_out(pipe: ChildStdout, service_name: String) -> Result<()> {
loop {
let mut buf = String::new();
- r.read_line(&mut buf)?;
+ if r.read_line(&mut buf)? == 0 {
+ log!(Color::Yellow, "[ INFO ] {} closed stdout", service_name);
+ return Ok(());
+ }
if file.metadata()?.len() > 30000000 {
file.set_len(0)?;
@@ -171,7 +174,10 @@ fn log_err(pipe: ChildStderr, service_name: String) -> Result<()> {
loop {
let mut buf = String::new();
- r.read_line(&mut buf)?;
+ if r.read_line(&mut buf)? == 0 {
+ log!(Color::Yellow, "[ INFO ] {} closed stderr", service_name);
+ return Ok(());
+ }
if file.metadata()?.len() > 30000000 {
file.set_len(0)?;