diff options
author | HimbeerserverDE <himbeerserverde@gmail.com> | 2023-11-18 14:52:06 +0100 |
---|---|---|
committer | HimbeerserverDE <himbeerserverde@gmail.com> | 2023-11-18 14:52:28 +0100 |
commit | dc131fd1d636e0c203e7b12b0801f741d234539d (patch) | |
tree | 9ac01eebdefb581bcf7fd2ceb9d8ed7ee3b9a7fd | |
parent | 692becaf4cc4196f7925b37bd16bf353d010fe65 (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.rs | 10 |
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)?; |