Merge pull request #77 from tnull/2022-10-catch-ctrlc
authorMatt Corallo <649246+TheBlueMatt@users.noreply.github.com>
Mon, 24 Oct 2022 21:10:39 +0000 (21:10 +0000)
committerGitHub <noreply@github.com>
Mon, 24 Oct 2022 21:10:39 +0000 (21:10 +0000)
Catch Ctrl-C and enable Ctrl-D

1  2 
src/main.rs

diff --combined src/main.rs
index 9ecc5e39a9f1444332601d29d662b46048cc5add,f3d888bca37e6818e0e4db727a64792c014fbdf6..0d5915d9effc49415a10e0080a49e90af83aae81
@@@ -48,6 -48,7 +48,6 @@@ use std::fs
  use std::fs::File;
  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};
@@@ -530,7 -531,7 +530,7 @@@ async fn start_ldk() 
                }
                chain_tip = Some(
                        init::synchronize_listeners(
 -                              &mut bitcoind_client.deref(),
 +                              bitcoind_client.as_ref(),
                                args.network,
                                &mut cache,
                                chain_listeners,
  
        // Step 14: Connect and Disconnect Blocks
        if chain_tip.is_none() {
 -              chain_tip =
 -                      Some(init::validate_best_block_header(&mut bitcoind_client.deref()).await.unwrap());
 +              chain_tip = Some(init::validate_best_block_header(bitcoind_client.as_ref()).await.unwrap());
        }
        let channel_manager_listener = channel_manager.clone();
        let chain_monitor_listener = chain_monitor.clone();
        let bitcoind_block_source = bitcoind_client.clone();
        let network = args.network;
        tokio::spawn(async move {
 -              let mut derefed = bitcoind_block_source.deref();
 -              let chain_poller = poll::ChainPoller::new(&mut derefed, network);
 +              let chain_poller = poll::ChainPoller::new(bitcoind_block_source.as_ref(), network);
                let chain_listener = (chain_monitor_listener, channel_manager_listener);
                let mut spv_client =
                        SpvClient::new(chain_tip.unwrap(), chain_poller, &mut cache, &chain_listener);
  
  #[tokio::main]
  pub async fn main() {
+       #[cfg(not(target_os = "windows"))]
+       {
+               // Catch Ctrl-C with a dummy signal handler.
+               unsafe {
+                       let mut new_action: libc::sigaction = core::mem::zeroed();
+                       let mut old_action: libc::sigaction = core::mem::zeroed();
+                       extern "C" fn dummy_handler(
+                               _: libc::c_int, _: *const libc::siginfo_t, _: *const libc::c_void,
+                       ) {
+                       }
+                       new_action.sa_sigaction = dummy_handler as libc::sighandler_t;
+                       new_action.sa_flags = libc::SA_SIGINFO;
+                       libc::sigaction(
+                               libc::SIGINT,
+                               &new_action as *const libc::sigaction,
+                               &mut old_action as *mut libc::sigaction,
+                       );
+               }
+       }
        start_ldk().await;
  }