From: Matt Corallo <649246+TheBlueMatt@users.noreply.github.com> Date: Fri, 25 Mar 2022 23:35:30 +0000 (+0000) Subject: Merge pull request #52 from TheBlueMatt/main X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=commitdiff_plain;h=f1c80562f10b3c840a632d2431b123033728008d;hp=a390ef2a3844f5b8ce03c35169b5c15ee2a1aaa6;p=ldk-sample Merge pull request #52 from TheBlueMatt/main Cleanly shut down PeerManager by disconnecting before we quit --- diff --git a/src/cli.rs b/src/cli.rs index c7dffd2..88f8542 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -309,7 +309,7 @@ pub(crate) async fn poll_for_user_input( println!("SUCCESS: connected to peer {}", pubkey); } } - "listchannels" => list_channels(channel_manager.clone()), + "listchannels" => list_channels(&channel_manager), "listpayments" => { list_payments(inbound_payments.clone(), outbound_payments.clone()) } @@ -343,7 +343,7 @@ pub(crate) async fn poll_for_user_input( channel_id.copy_from_slice(&channel_id_vec.unwrap()); force_close_channel(channel_id, channel_manager.clone()); } - "nodeinfo" => node_info(channel_manager.clone(), peer_manager.clone()), + "nodeinfo" => node_info(&channel_manager, &peer_manager), "listpeers" => list_peers(peer_manager.clone()), "signmessage" => { const MSG_STARTPOS: usize = "signmessage".len() + 1; @@ -379,16 +379,13 @@ fn help() { println!("signmessage "); } -fn node_info(channel_manager: Arc, peer_manager: Arc) { +fn node_info(channel_manager: &Arc, peer_manager: &Arc) { println!("\t{{"); println!("\t\t node_pubkey: {}", channel_manager.get_our_node_id()); let chans = channel_manager.list_channels(); println!("\t\t num_channels: {}", chans.len()); println!("\t\t num_usable_channels: {}", chans.iter().filter(|c| c.is_usable).count()); - let local_balance_msat = chans - .iter() - .map(|c| c.unspendable_punishment_reserve.unwrap_or(0) * 1000 + c.outbound_capacity_msat) - .sum::(); + let local_balance_msat = chans.iter().map(|c| c.balance_msat).sum::(); println!("\t\t local_balance_msat: {}", local_balance_msat); println!("\t\t num_peers: {}", peer_manager.get_peer_node_ids().len()); println!("\t}},"); @@ -402,7 +399,7 @@ fn list_peers(peer_manager: Arc) { println!("\t}},"); } -fn list_channels(channel_manager: Arc) { +fn list_channels(channel_manager: &Arc) { print!("["); for chan_info in channel_manager.list_channels() { println!(""); @@ -420,11 +417,7 @@ fn list_channels(channel_manager: Arc) { } println!("\t\tis_confirmed_onchain: {},", chan_info.is_funding_locked); println!("\t\tchannel_value_satoshis: {},", chan_info.channel_value_satoshis); - println!( - "\t\tlocal_balance_msat: {},", - chan_info.outbound_capacity_msat - + chan_info.unspendable_punishment_reserve.unwrap_or(0) * 1000 - ); + println!("\t\tlocal_balance_msat: {},", chan_info.balance_msat); if chan_info.is_usable { println!("\t\tavailable_balance_for_send_msat: {},", chan_info.outbound_capacity_msat); println!("\t\tavailable_balance_for_recv_msat: {},", chan_info.inbound_capacity_msat); diff --git a/src/main.rs b/src/main.rs index cdbb178..e962db8 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}; @@ -528,6 +529,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 @@ -535,6 +538,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(), @@ -704,6 +710,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(); }