X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=src%2Fmain.rs;h=f48a11897b825457a4a3faf1bc7fbd471bb0875e;hb=1f5243998796bcbd6a26eb93cef40bfd2e1bdf75;hp=07afa66436164c15b0b5af0e018fc8135549d917;hpb=6ba85b7e3fe302a2a4368081c9bf3e6d2be7be1e;p=ldk-sample diff --git a/src/main.rs b/src/main.rs index 07afa66..f48a118 100644 --- a/src/main.rs +++ b/src/main.rs @@ -48,6 +48,7 @@ use std::io; use std::io::Write; use std::ops::Deref; use std::path::Path; +use std::sync::atomic::{AtomicBool, Ordering}; use std::sync::{Arc, Mutex}; use std::time::{Duration, SystemTime}; @@ -542,6 +543,8 @@ async fn start_ldk() { let peer_manager_connection_handler = peer_manager.clone(); let listening_port = args.ldk_peer_listening_port; + let stop_listen = Arc::new(AtomicBool::new(false)); + let stop_listen_ref = Arc::clone(&stop_listen); tokio::spawn(async move { let listener = tokio::net::TcpListener::bind(format!("0.0.0.0:{}", listening_port)) .await @@ -549,6 +552,9 @@ async fn start_ldk() { loop { let peer_mgr = peer_manager_connection_handler.clone(); let tcp_stream = listener.accept().await.unwrap().0; + if stop_listen_ref.load(Ordering::Acquire) { + return; + } tokio::spawn(async move { lightning_net_tokio::setup_inbound( peer_mgr.clone(), @@ -709,10 +715,11 @@ async fn start_ldk() { // Start the CLI. cli::poll_for_user_input( - invoice_payer.clone(), - peer_manager.clone(), - channel_manager.clone(), - keys_manager.clone(), + Arc::clone(&invoice_payer), + Arc::clone(&peer_manager), + Arc::clone(&channel_manager), + Arc::clone(&keys_manager), + Arc::clone(&network_graph), inbound_payments, outbound_payments, ldk_data_dir.clone(), @@ -720,6 +727,11 @@ async fn start_ldk() { ) .await; + // 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.store(true, Ordering::Release); + peer_manager.disconnect_all_peers(); + // Stop the background processor. background_processor.stop().unwrap(); }