@@ -802,7 +802,7 @@ async fn start_ldk() {
802
802
803
803
// Step 20: Background Processing
804
804
let ( bp_exit, bp_exit_check) = tokio:: sync:: watch:: channel ( ( ) ) ;
805
- let background_processor = tokio:: spawn ( process_events_async (
805
+ let mut background_processor = tokio:: spawn ( process_events_async (
806
806
Arc :: clone ( & persister) ,
807
807
event_handler,
808
808
chain_monitor. clone ( ) ,
@@ -898,7 +898,7 @@ async fn start_ldk() {
898
898
) ) ;
899
899
900
900
// Start the CLI.
901
- cli:: poll_for_user_input (
901
+ let cli_poll = tokio :: spawn ( cli:: poll_for_user_input (
902
902
Arc :: clone ( & peer_manager) ,
903
903
Arc :: clone ( & channel_manager) ,
904
904
Arc :: clone ( & keys_manager) ,
@@ -910,17 +910,29 @@ async fn start_ldk() {
910
910
network,
911
911
Arc :: clone ( & logger) ,
912
912
Arc :: clone ( & persister) ,
913
- )
914
- . await ;
913
+ ) ) ;
914
+
915
+ // Exit if either CLI polling exits or the background processor exits (which shouldn't happen
916
+ // unless we fail to write to the filesystem).
917
+ tokio:: select! {
918
+ _ = cli_poll => { } ,
919
+ bg_res = & mut background_processor => {
920
+ stop_listen_connect. store( true , Ordering :: Release ) ;
921
+ peer_manager. disconnect_all_peers( ) ;
922
+ panic!( "ERR: background processing stopped with result {:?}, exiting" , bg_res) ;
923
+ } ,
924
+ }
915
925
916
926
// Disconnect our peers and stop accepting new connections. This ensures we don't continue
917
927
// updating our channel data after we've stopped the background processor.
918
928
stop_listen_connect. store ( true , Ordering :: Release ) ;
919
929
peer_manager. disconnect_all_peers ( ) ;
920
930
921
931
// Stop the background processor.
922
- bp_exit. send ( ( ) ) . unwrap ( ) ;
923
- background_processor. await . unwrap ( ) . unwrap ( ) ;
932
+ if !bp_exit. is_closed ( ) {
933
+ bp_exit. send ( ( ) ) . unwrap ( ) ;
934
+ background_processor. await . unwrap ( ) . unwrap ( ) ;
935
+ }
924
936
}
925
937
926
938
#[ tokio:: main]
0 commit comments