let mut cache = UnboundedCache::new();
let mut chain_tip: Option<poll::ValidatedBlockHeader> = None;
if restarting_node {
- let mut chain_listeners =
- vec![(channel_manager_blockhash, &channel_manager as &dyn chain::Listen)];
+ let mut chain_listeners = vec![(
+ channel_manager_blockhash,
+ &channel_manager as &(dyn chain::Listen + Send + Sync),
+ )];
for (blockhash, channel_monitor) in channelmonitors.drain(..) {
let outpoint = channel_monitor.get_funding_txo().0;
}
for monitor_listener_info in chain_listener_channel_monitors.iter_mut() {
- chain_listeners
- .push((monitor_listener_info.0, &monitor_listener_info.1 as &dyn chain::Listen));
+ chain_listeners.push((
+ monitor_listener_info.0,
+ &monitor_listener_info.1 as &(dyn chain::Listen + Send + Sync),
+ ));
}
chain_tip = Some(
init::synchronize_listeners(
#[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;
}