@@ -313,6 +313,15 @@ fn update_scorer<'a, S: 'static + Deref<Target = SC> + Send + Sync, SC: 'a + Wri
313
313
true
314
314
}
315
315
316
+ macro_rules! maybe_await {
317
+ ( true , $e: expr) => {
318
+ $e. await
319
+ } ;
320
+ ( false , $e: expr) => {
321
+ $e
322
+ } ;
323
+ }
324
+
316
325
macro_rules! define_run_body {
317
326
(
318
327
$persister: ident, $chain_monitor: ident, $process_chain_monitor_events: expr,
@@ -321,7 +330,7 @@ macro_rules! define_run_body {
321
330
$peer_manager: ident, $gossip_sync: ident,
322
331
$process_sweeper: expr,
323
332
$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 ,
325
334
) => { {
326
335
log_trace!( $logger, "Calling ChannelManager's timer_tick_occurred on startup" ) ;
327
336
$channel_manager. get_cm( ) . timer_tick_occurred( ) ;
@@ -377,7 +386,7 @@ macro_rules! define_run_body {
377
386
378
387
if $channel_manager. get_cm( ) . get_and_clear_needs_persistence( ) {
379
388
log_trace!( $logger, "Persisting ChannelManager..." ) ;
380
- $ persister. persist_manager( & $channel_manager) . await ?;
389
+ maybe_await! ( $async , $ persister. persist_manager( & $channel_manager) ) ?;
381
390
log_trace!( $logger, "Done persisting ChannelManager." ) ;
382
391
}
383
392
if $timer_elapsed( & mut last_freshness_call, FRESHNESS_TIMER ) {
@@ -438,7 +447,7 @@ macro_rules! define_run_body {
438
447
log_trace!( $logger, "Persisting network graph." ) ;
439
448
}
440
449
441
- if let Err ( e) = $ persister. persist_graph( network_graph) . await {
450
+ if let Err ( e) = maybe_await! ( $async , $ persister. persist_graph( network_graph) ) {
442
451
log_error!( $logger, "Error: Failed to persist network graph, check your disk and permissions {}" , e)
443
452
}
444
453
@@ -466,7 +475,7 @@ macro_rules! define_run_body {
466
475
} else {
467
476
log_trace!( $logger, "Persisting scorer" ) ;
468
477
}
469
- if let Err ( e) = $ persister. persist_scorer( & scorer) . await {
478
+ if let Err ( e) = maybe_await! ( $async , $ persister. persist_scorer( & scorer) ) {
470
479
log_error!( $logger, "Error: Failed to persist scorer, check your disk and permissions {}" , e)
471
480
}
472
481
}
@@ -489,16 +498,16 @@ macro_rules! define_run_body {
489
498
// After we exit, ensure we persist the ChannelManager one final time - this avoids
490
499
// some races where users quit while channel updates were in-flight, with
491
500
// 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) ) ?;
493
502
494
503
// Persist Scorer on exit
495
504
if let Some ( ref scorer) = $scorer {
496
- $ persister. persist_scorer( & scorer) . await ?;
505
+ maybe_await! ( $async , $ persister. persist_scorer( & scorer) ) ?;
497
506
}
498
507
499
508
// Persist NetworkGraph on exit
500
509
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) ) ?;
502
511
}
503
512
504
513
Ok ( ( ) )
@@ -920,6 +929,7 @@ where
920
929
} ,
921
930
mobile_interruptable_platform,
922
931
fetch_time,
932
+ true ,
923
933
)
924
934
}
925
935
@@ -1042,65 +1052,64 @@ impl BackgroundProcessor {
1042
1052
}
1043
1053
event_handler. handle_event ( event)
1044
1054
} ;
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
+ )
1104
1113
} ) ;
1105
1114
Self { stop_thread : stop_thread_clone, thread_handle : Some ( handle) }
1106
1115
}
0 commit comments