stop decoder with SIGTERM signal, instead of kill on non windows systems
This commit is contained in:
parent
d1716acfc5
commit
d2c72d56fe
7
Cargo.lock
generated
7
Cargo.lock
generated
@ -1191,6 +1191,7 @@ dependencies = [
|
|||||||
"serde_json",
|
"serde_json",
|
||||||
"serde_yaml",
|
"serde_yaml",
|
||||||
"shlex",
|
"shlex",
|
||||||
|
"signal-child",
|
||||||
"simplelog",
|
"simplelog",
|
||||||
"time 0.3.23",
|
"time 0.3.23",
|
||||||
"walkdir",
|
"walkdir",
|
||||||
@ -2817,6 +2818,12 @@ version = "1.1.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3"
|
checksum = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "signal-child"
|
||||||
|
version = "1.0.5"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "b2a4eed4c5ae38438470ab8e0108bb751012f786f44ff585cfd837c9a5fe426f"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "signal-hook-registry"
|
name = "signal-hook-registry"
|
||||||
version = "1.4.1"
|
version = "1.4.1"
|
||||||
|
@ -159,15 +159,11 @@ pub fn player(
|
|||||||
thread::spawn(move || stderr_reader(dec_err, Decoder, dec_p_ctl));
|
thread::spawn(move || stderr_reader(dec_err, Decoder, dec_p_ctl));
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
// when server is running, read from channel
|
// when server is running, read from it
|
||||||
if proc_control.server_is_running.load(Ordering::SeqCst) {
|
if proc_control.server_is_running.load(Ordering::SeqCst) {
|
||||||
if !live_on {
|
if !live_on {
|
||||||
info!("Switch from {} to live ingest", config.processing.mode);
|
info!("Switch from {} to live ingest", config.processing.mode);
|
||||||
|
|
||||||
if let Err(e) = enc_writer.flush() {
|
|
||||||
error!("Encoder error: {e}")
|
|
||||||
}
|
|
||||||
|
|
||||||
if let Err(e) = proc_control.stop(Decoder) {
|
if let Err(e) = proc_control.stop(Decoder) {
|
||||||
error!("{e}")
|
error!("{e}")
|
||||||
}
|
}
|
||||||
@ -188,11 +184,8 @@ pub fn player(
|
|||||||
if live_on {
|
if live_on {
|
||||||
info!("Switch from live ingest to {}", config.processing.mode);
|
info!("Switch from live ingest to {}", config.processing.mode);
|
||||||
|
|
||||||
if let Err(e) = enc_writer.flush() {
|
|
||||||
error!("Encoder error: {e}")
|
|
||||||
}
|
|
||||||
|
|
||||||
live_on = false;
|
live_on = false;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
let dec_bytes_len = match dec_reader.read(&mut buffer[..]) {
|
let dec_bytes_len = match dec_reader.read(&mut buffer[..]) {
|
||||||
|
@ -32,3 +32,6 @@ features = ["shlobj", "std", "winerror"]
|
|||||||
|
|
||||||
[target.x86_64-unknown-linux-musl.dependencies]
|
[target.x86_64-unknown-linux-musl.dependencies]
|
||||||
openssl = { version = "0.10", features = ["vendored"] }
|
openssl = { version = "0.10", features = ["vendored"] }
|
||||||
|
|
||||||
|
[target.'cfg(not(target_arch = "windows"))'.dependencies]
|
||||||
|
signal-child = "1"
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
use std::{
|
use std::{
|
||||||
fmt,
|
env, fmt,
|
||||||
process::Child,
|
process::Child,
|
||||||
sync::{
|
sync::{
|
||||||
atomic::{AtomicBool, AtomicUsize, Ordering},
|
atomic::{AtomicBool, AtomicUsize, Ordering},
|
||||||
@ -7,6 +7,9 @@ use std::{
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#[cfg(not(windows))]
|
||||||
|
use signal_child::Signalable;
|
||||||
|
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use simplelog::*;
|
use simplelog::*;
|
||||||
|
|
||||||
@ -71,9 +74,13 @@ impl ProcessControl {
|
|||||||
match unit {
|
match unit {
|
||||||
Decoder => {
|
Decoder => {
|
||||||
if let Some(proc) = self.decoder_term.lock().unwrap().as_mut() {
|
if let Some(proc) = self.decoder_term.lock().unwrap().as_mut() {
|
||||||
if let Err(e) = proc.kill() {
|
if env::consts::OS != "windows" {
|
||||||
|
if let Err(e) = proc.term() {
|
||||||
|
return Err(format!("Decoder {e:?}"));
|
||||||
|
}
|
||||||
|
} else if let Err(e) = proc.kill() {
|
||||||
return Err(format!("Decoder {e:?}"));
|
return Err(format!("Decoder {e:?}"));
|
||||||
};
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Encoder => {
|
Encoder => {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user