From dabe1c3dead83b09476894c706a198478969607e Mon Sep 17 00:00:00 2001 From: Valentine Wallace Date: Thu, 3 Aug 2023 14:22:25 -0700 Subject: [PATCH] Detect if the background processor exits early and shutdown if so --- src/main.rs | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/src/main.rs b/src/main.rs index 2012921c..cf5fec40 100644 --- a/src/main.rs +++ b/src/main.rs @@ -898,7 +898,7 @@ async fn start_ldk() { )); // Start the CLI. - cli::poll_for_user_input( + let cli_poll = tokio::spawn(cli::poll_for_user_input( Arc::clone(&peer_manager), Arc::clone(&channel_manager), Arc::clone(&keys_manager), @@ -910,8 +910,18 @@ async fn start_ldk() { network, Arc::clone(&logger), Arc::clone(&persister), - ) - .await; + )); + + // Exit if either CLI polling exits or the background processor exits (which shouldn't happen + // unless we fail to write to the filesystem). + tokio::select! { + _ = cli_poll => {}, + bg_res = background_processor => { + stop_listen_connect.store(true, Ordering::Release); + peer_manager.disconnect_all_peers(); + panic!("ERR: background processing stopped with result {:?}, exiting", bg_res); + }, + } // Disconnect our peers and stop accepting new connections. This ensures we don't continue // updating our channel data after we've stopped the background processor. @@ -919,8 +929,9 @@ async fn start_ldk() { peer_manager.disconnect_all_peers(); // Stop the background processor. - bp_exit.send(()).unwrap(); - background_processor.await.unwrap().unwrap(); + if !bp_exit.is_closed() { + bp_exit.send(()).unwrap(); + } } #[tokio::main]