@@ -313,6 +313,15 @@ fn update_scorer<'a, S: 'static + Deref<Target = SC> + Send + Sync, SC: 'a + Wri
313313 true
314314}
315315
316+ macro_rules! maybe_await {
317+ ( true , $e: expr) => {
318+ $e. await
319+ } ;
320+ ( false , $e: expr) => {
321+ $e
322+ } ;
323+ }
324+
316325macro_rules! define_run_body {
317326 (
318327 $persister: ident, $chain_monitor: ident, $process_chain_monitor_events: expr,
@@ -321,7 +330,7 @@ macro_rules! define_run_body {
321330 $peer_manager: ident, $gossip_sync: ident,
322331 $process_sweeper: expr,
323332 $logger: ident, $scorer: ident, $loop_exit_check: expr, $await: expr, $get_timer: expr,
324- $timer_elapsed: expr, $check_slow_await: expr, $time_fetch: expr,
333+ $timer_elapsed: expr, $check_slow_await: expr, $time_fetch: expr, $async : tt ,
325334 ) => { {
326335 log_trace!( $logger, "Calling ChannelManager's timer_tick_occurred on startup" ) ;
327336 $channel_manager. get_cm( ) . timer_tick_occurred( ) ;
@@ -377,7 +386,7 @@ macro_rules! define_run_body {
377386
378387 if $channel_manager. get_cm( ) . get_and_clear_needs_persistence( ) {
379388 log_trace!( $logger, "Persisting ChannelManager..." ) ;
380- $ persister. persist_manager( & $channel_manager) . await ?;
389+ maybe_await! ( $async , $ persister. persist_manager( & $channel_manager) ) ?;
381390 log_trace!( $logger, "Done persisting ChannelManager." ) ;
382391 }
383392 if $timer_elapsed( & mut last_freshness_call, FRESHNESS_TIMER ) {
@@ -438,7 +447,7 @@ macro_rules! define_run_body {
438447 log_trace!( $logger, "Persisting network graph." ) ;
439448 }
440449
441- if let Err ( e) = $ persister. persist_graph( network_graph) . await {
450+ if let Err ( e) = maybe_await! ( $async , $ persister. persist_graph( network_graph) ) {
442451 log_error!( $logger, "Error: Failed to persist network graph, check your disk and permissions {}" , e)
443452 }
444453
@@ -466,7 +475,7 @@ macro_rules! define_run_body {
466475 } else {
467476 log_trace!( $logger, "Persisting scorer" ) ;
468477 }
469- if let Err ( e) = $ persister. persist_scorer( & scorer) . await {
478+ if let Err ( e) = maybe_await! ( $async , $ persister. persist_scorer( & scorer) ) {
470479 log_error!( $logger, "Error: Failed to persist scorer, check your disk and permissions {}" , e)
471480 }
472481 }
@@ -489,16 +498,16 @@ macro_rules! define_run_body {
489498 // After we exit, ensure we persist the ChannelManager one final time - this avoids
490499 // some races where users quit while channel updates were in-flight, with
491500 // ChannelMonitor update(s) persisted without a corresponding ChannelManager update.
492- $ persister. persist_manager( & $channel_manager) . await ?;
501+ maybe_await! ( $async , $ persister. persist_manager( & $channel_manager) ) ?;
493502
494503 // Persist Scorer on exit
495504 if let Some ( ref scorer) = $scorer {
496- $ persister. persist_scorer( & scorer) . await ?;
505+ maybe_await! ( $async , $ persister. persist_scorer( & scorer) ) ?;
497506 }
498507
499508 // Persist NetworkGraph on exit
500509 if let Some ( network_graph) = $gossip_sync. network_graph( ) {
501- $ persister. persist_graph( network_graph) . await ?;
510+ maybe_await! ( $async , $ persister. persist_graph( network_graph) ) ?;
502511 }
503512
504513 Ok ( ( ) )
@@ -920,6 +929,7 @@ where
920929 } ,
921930 mobile_interruptable_platform,
922931 fetch_time,
932+ true ,
923933 )
924934}
925935
@@ -1042,65 +1052,64 @@ impl BackgroundProcessor {
10421052 }
10431053 event_handler. handle_event ( event)
10441054 } ;
1045- // define_run_body!(
1046- // persister,
1047- // chain_monitor,
1048- // chain_monitor.process_pending_events(&event_handler),
1049- // channel_manager,
1050- // channel_manager.get_cm().process_pending_events(&event_handler),
1051- // onion_messenger,
1052- // if let Some(om) = &onion_messenger {
1053- // om.get_om().process_pending_events(&event_handler)
1054- // },
1055- // peer_manager,
1056- // gossip_sync,
1057- // {
1058- // if let Some(ref sweeper) = sweeper {
1059- // let _ = sweeper.regenerate_and_broadcast_spend_if_necessary();
1060- // }
1061- // },
1062- // logger,
1063- // scorer,
1064- // stop_thread.load(Ordering::Acquire),
1065- // {
1066- // let sleeper = match (onion_messenger.as_ref(), liquidity_manager.as_ref()) {
1067- // (Some(om), Some(lm)) => Sleeper::from_four_futures(
1068- // &channel_manager.get_cm().get_event_or_persistence_needed_future(),
1069- // &chain_monitor.get_update_future(),
1070- // &om.get_om().get_update_future(),
1071- // &lm.get_lm().get_pending_msgs_future(),
1072- // ),
1073- // (Some(om), None) => Sleeper::from_three_futures(
1074- // &channel_manager.get_cm().get_event_or_persistence_needed_future(),
1075- // &chain_monitor.get_update_future(),
1076- // &om.get_om().get_update_future(),
1077- // ),
1078- // (None, Some(lm)) => Sleeper::from_three_futures(
1079- // &channel_manager.get_cm().get_event_or_persistence_needed_future(),
1080- // &chain_monitor.get_update_future(),
1081- // &lm.get_lm().get_pending_msgs_future(),
1082- // ),
1083- // (None, None) => Sleeper::from_two_futures(
1084- // &channel_manager.get_cm().get_event_or_persistence_needed_future(),
1085- // &chain_monitor.get_update_future(),
1086- // ),
1087- // };
1088- // sleeper.wait_timeout(Duration::from_millis(100));
1089- // },
1090- // |_| Instant::now(),
1091- // |time: &Instant, dur| time.elapsed().as_secs() > dur,
1092- // false,
1093- // || {
1094- // use std::time::SystemTime;
1095- // Some(
1096- // SystemTime::now()
1097- // .duration_since(SystemTime::UNIX_EPOCH)
1098- // .expect("Time should be sometime after 1970"),
1099- // )
1100- // },
1101- // )
1102-
1103- Ok ( ( ) )
1055+ define_run_body ! (
1056+ persister,
1057+ chain_monitor,
1058+ chain_monitor. process_pending_events( & event_handler) ,
1059+ channel_manager,
1060+ channel_manager. get_cm( ) . process_pending_events( & event_handler) ,
1061+ onion_messenger,
1062+ if let Some ( om) = & onion_messenger {
1063+ om. get_om( ) . process_pending_events( & event_handler)
1064+ } ,
1065+ peer_manager,
1066+ gossip_sync,
1067+ {
1068+ if let Some ( ref sweeper) = sweeper {
1069+ let _ = sweeper. regenerate_and_broadcast_spend_if_necessary( ) ;
1070+ }
1071+ } ,
1072+ logger,
1073+ scorer,
1074+ stop_thread. load( Ordering :: Acquire ) ,
1075+ {
1076+ let sleeper = match ( onion_messenger. as_ref( ) , liquidity_manager. as_ref( ) ) {
1077+ ( Some ( om) , Some ( lm) ) => Sleeper :: from_four_futures(
1078+ & channel_manager. get_cm( ) . get_event_or_persistence_needed_future( ) ,
1079+ & chain_monitor. get_update_future( ) ,
1080+ & om. get_om( ) . get_update_future( ) ,
1081+ & lm. get_lm( ) . get_pending_msgs_future( ) ,
1082+ ) ,
1083+ ( Some ( om) , None ) => Sleeper :: from_three_futures(
1084+ & channel_manager. get_cm( ) . get_event_or_persistence_needed_future( ) ,
1085+ & chain_monitor. get_update_future( ) ,
1086+ & om. get_om( ) . get_update_future( ) ,
1087+ ) ,
1088+ ( None , Some ( lm) ) => Sleeper :: from_three_futures(
1089+ & channel_manager. get_cm( ) . get_event_or_persistence_needed_future( ) ,
1090+ & chain_monitor. get_update_future( ) ,
1091+ & lm. get_lm( ) . get_pending_msgs_future( ) ,
1092+ ) ,
1093+ ( None , None ) => Sleeper :: from_two_futures(
1094+ & channel_manager. get_cm( ) . get_event_or_persistence_needed_future( ) ,
1095+ & chain_monitor. get_update_future( ) ,
1096+ ) ,
1097+ } ;
1098+ sleeper. wait_timeout( Duration :: from_millis( 100 ) ) ;
1099+ } ,
1100+ |_| Instant :: now( ) ,
1101+ |time: & Instant , dur| time. elapsed( ) . as_secs( ) > dur,
1102+ false ,
1103+ || {
1104+ use std:: time:: SystemTime ;
1105+ Some (
1106+ SystemTime :: now( )
1107+ . duration_since( SystemTime :: UNIX_EPOCH )
1108+ . expect( "Time should be sometime after 1970" ) ,
1109+ )
1110+ } ,
1111+ false ,
1112+ )
11041113 } ) ;
11051114 Self { stop_thread : stop_thread_clone, thread_handle : Some ( handle) }
11061115 }
0 commit comments