Skip to content

Commit

Permalink
Detect if the background processor exits early and shutdown if so
Browse files Browse the repository at this point in the history
  • Loading branch information
valentinewallace committed Aug 3, 2023
1 parent b7daadc commit dabe1c3
Showing 1 changed file with 16 additions and 5 deletions.
21 changes: 16 additions & 5 deletions src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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),
Expand All @@ -910,17 +910,28 @@ 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.
stop_listen_connect.store(true, Ordering::Release);
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]
Expand Down

0 comments on commit dabe1c3

Please sign in to comment.