From 77b2feef95679036133e8b819bea69838b1ad871 Mon Sep 17 00:00:00 2001 From: jb-alvarado Date: Sat, 30 Jul 2022 23:04:03 +0200 Subject: [PATCH] close program, when rpc port is used already --- ffplayout-engine/src/rpc/mod.rs | 19 ++++++++++++------- lib/src/utils/controller.rs | 4 +++- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/ffplayout-engine/src/rpc/mod.rs b/ffplayout-engine/src/rpc/mod.rs index 5dded58f..b8dd3014 100644 --- a/ffplayout-engine/src/rpc/mod.rs +++ b/ffplayout-engine/src/rpc/mod.rs @@ -64,7 +64,7 @@ pub fn json_rpc_server( config: PlayoutConfig, play_control: PlayerControl, playout_stat: PlayoutStatus, - proc_control: ProcessControl, + mut proc_control: ProcessControl, ) { let addr = config.rpc_server.address.clone(); let auth = config.rpc_server.authorization.clone(); @@ -249,7 +249,7 @@ pub fn json_rpc_server( info!("Run JSON RPC server, listening on: http://{addr}"); // build rpc server - let server = ServerBuilder::new(io) + match ServerBuilder::new(io) .cors(DomainsValidation::AllowOnly(vec![ AccessControlAllowOrigin::Null, ])) @@ -269,9 +269,14 @@ pub fn json_rpc_server( }) .rest_api(RestApi::Secure) .start_http(&addr.parse().unwrap()) - .expect("Unable to start RPC server"); - - *proc_control.rpc_handle.lock().unwrap() = Some(server.close_handle()); - - server.wait(); + { + Ok(server) => { + *proc_control.rpc_handle.lock().unwrap() = Some(server.close_handle()); + server.wait(); + } + Err(e) => { + error!("Unable to start RPC server: {e}"); + proc_control.kill_all(); + } + }; } diff --git a/lib/src/utils/controller.rs b/lib/src/utils/controller.rs index 4da12c10..916c6e6a 100644 --- a/lib/src/utils/controller.rs +++ b/lib/src/utils/controller.rs @@ -1,6 +1,6 @@ use std::{ fmt, - process::Child, + process::{exit, Child}, sync::{ atomic::{AtomicBool, AtomicUsize, Ordering}, Arc, Mutex, @@ -148,6 +148,8 @@ impl ProcessControl { } } } + + exit(1); } }