@@ -803,6 +803,15 @@ where
803
803
} else {
804
804
false
805
805
} ;
806
+ match check_sleeper ( & mut last_freshness_call) {
807
+ Some ( false ) => {
808
+ log_trace ! ( logger, "Calling ChannelManager's timer_tick_occurred" ) ;
809
+ channel_manager. get_cm ( ) . timer_tick_occurred ( ) ;
810
+ last_freshness_call = sleeper ( FRESHNESS_TIMER ) ;
811
+ } ,
812
+ Some ( true ) => break ,
813
+ None => { } ,
814
+ }
806
815
if channel_manager. get_cm ( ) . get_and_clear_needs_persistence ( ) {
807
816
log_trace ! ( logger, "Persisting ChannelManager..." ) ;
808
817
kv_store
@@ -815,53 +824,6 @@ where
815
824
. await ?;
816
825
log_trace ! ( logger, "Done persisting ChannelManager." ) ;
817
826
}
818
- match check_sleeper ( & mut last_freshness_call) {
819
- Some ( false ) => {
820
- log_trace ! ( logger, "Calling ChannelManager's timer_tick_occurred" ) ;
821
- channel_manager. get_cm ( ) . timer_tick_occurred ( ) ;
822
- last_freshness_call = sleeper ( FRESHNESS_TIMER ) ;
823
- } ,
824
- Some ( true ) => break ,
825
- None => { } ,
826
- }
827
- match check_sleeper ( & mut last_onion_message_handler_call) {
828
- Some ( false ) => {
829
- if let Some ( om) = & onion_messenger {
830
- log_trace ! ( logger, "Calling OnionMessageHandler's timer_tick_occurred" ) ;
831
- om. get_om ( ) . timer_tick_occurred ( ) ;
832
- }
833
- last_onion_message_handler_call = sleeper ( ONION_MESSAGE_HANDLER_TIMER ) ;
834
- } ,
835
- Some ( true ) => break ,
836
- None => { } ,
837
- }
838
- if await_slow {
839
- // On various platforms, we may be starved of CPU cycles for several reasons.
840
- // E.g. on iOS, if we've been in the background, we will be entirely paused.
841
- // Similarly, if we're on a desktop platform and the device has been asleep, we
842
- // may not get any cycles.
843
- // We detect this by checking if our max-100ms-sleep, above, ran longer than a
844
- // full second, at which point we assume sockets may have been killed (they
845
- // appear to be at least on some platforms, even if it has only been a second).
846
- // Note that we have to take care to not get here just because user event
847
- // processing was slow at the top of the loop. For example, the sample client
848
- // may call Bitcoin Core RPCs during event handling, which very often takes
849
- // more than a handful of seconds to complete, and shouldn't disconnect all our
850
- // peers.
851
- log_trace ! ( logger, "100ms sleep took more than a second, disconnecting peers." ) ;
852
- peer_manager. as_ref ( ) . disconnect_all_peers ( ) ;
853
- last_ping_call = sleeper ( PING_TIMER ) ;
854
- } else {
855
- match check_sleeper ( & mut last_ping_call) {
856
- Some ( false ) => {
857
- log_trace ! ( logger, "Calling PeerManager's timer_tick_occurred" ) ;
858
- peer_manager. as_ref ( ) . timer_tick_occurred ( ) ;
859
- last_ping_call = sleeper ( PING_TIMER ) ;
860
- } ,
861
- Some ( true ) => break ,
862
- _ => { } ,
863
- }
864
- }
865
827
866
828
// Note that we want to run a graph prune once not long after startup before
867
829
// falling back to our usual hourly prunes. This avoids short-lived clients never
@@ -948,15 +910,6 @@ where
948
910
Some ( true ) => break ,
949
911
None => { } ,
950
912
}
951
- match check_sleeper ( & mut last_rebroadcast_call) {
952
- Some ( false ) => {
953
- log_trace ! ( logger, "Rebroadcasting monitor's pending claims" ) ;
954
- chain_monitor. rebroadcast_pending_claims ( ) ;
955
- last_rebroadcast_call = sleeper ( REBROADCAST_TIMER ) ;
956
- } ,
957
- Some ( true ) => break ,
958
- None => { } ,
959
- }
960
913
match check_sleeper ( & mut last_sweeper_call) {
961
914
Some ( false ) => {
962
915
log_trace ! ( logger, "Regenerating sweeper spends if necessary" ) ;
@@ -968,6 +921,57 @@ where
968
921
Some ( true ) => break ,
969
922
None => { } ,
970
923
}
924
+ match check_sleeper ( & mut last_onion_message_handler_call) {
925
+ Some ( false ) => {
926
+ if let Some ( om) = & onion_messenger {
927
+ log_trace ! ( logger, "Calling OnionMessageHandler's timer_tick_occurred" ) ;
928
+ om. get_om ( ) . timer_tick_occurred ( ) ;
929
+ }
930
+ last_onion_message_handler_call = sleeper ( ONION_MESSAGE_HANDLER_TIMER ) ;
931
+ } ,
932
+ Some ( true ) => break ,
933
+ None => { } ,
934
+ }
935
+
936
+ // Peer manager timer tick. If we were interrupted on a mobile platform, we disconnect all peers.
937
+ if await_slow {
938
+ // On various platforms, we may be starved of CPU cycles for several reasons.
939
+ // E.g. on iOS, if we've been in the background, we will be entirely paused.
940
+ // Similarly, if we're on a desktop platform and the device has been asleep, we
941
+ // may not get any cycles.
942
+ // We detect this by checking if our max-100ms-sleep, above, ran longer than a
943
+ // full second, at which point we assume sockets may have been killed (they
944
+ // appear to be at least on some platforms, even if it has only been a second).
945
+ // Note that we have to take care to not get here just because user event
946
+ // processing was slow at the top of the loop. For example, the sample client
947
+ // may call Bitcoin Core RPCs during event handling, which very often takes
948
+ // more than a handful of seconds to complete, and shouldn't disconnect all our
949
+ // peers.
950
+ log_trace ! ( logger, "100ms sleep took more than a second, disconnecting peers." ) ;
951
+ peer_manager. as_ref ( ) . disconnect_all_peers ( ) ;
952
+ last_ping_call = sleeper ( PING_TIMER ) ;
953
+ } else {
954
+ match check_sleeper ( & mut last_ping_call) {
955
+ Some ( false ) => {
956
+ log_trace ! ( logger, "Calling PeerManager's timer_tick_occurred" ) ;
957
+ peer_manager. as_ref ( ) . timer_tick_occurred ( ) ;
958
+ last_ping_call = sleeper ( PING_TIMER ) ;
959
+ } ,
960
+ Some ( true ) => break ,
961
+ _ => { } ,
962
+ }
963
+ }
964
+
965
+ // Rebroadcast pending claims.
966
+ match check_sleeper ( & mut last_rebroadcast_call) {
967
+ Some ( false ) => {
968
+ log_trace ! ( logger, "Rebroadcasting monitor's pending claims" ) ;
969
+ chain_monitor. rebroadcast_pending_claims ( ) ;
970
+ last_rebroadcast_call = sleeper ( REBROADCAST_TIMER ) ;
971
+ } ,
972
+ Some ( true ) => break ,
973
+ None => { } ,
974
+ }
971
975
}
972
976
log_trace ! ( logger, "Terminating background processor." ) ;
973
977
@@ -1292,6 +1296,11 @@ impl BackgroundProcessor {
1292
1296
log_trace ! ( logger, "Terminating background processor." ) ;
1293
1297
break ;
1294
1298
}
1299
+ if last_freshness_call. elapsed ( ) > FRESHNESS_TIMER {
1300
+ log_trace ! ( logger, "Calling ChannelManager's timer_tick_occurred" ) ;
1301
+ channel_manager. get_cm ( ) . timer_tick_occurred ( ) ;
1302
+ last_freshness_call = Instant :: now ( ) ;
1303
+ }
1295
1304
if channel_manager. get_cm ( ) . get_and_clear_needs_persistence ( ) {
1296
1305
log_trace ! ( logger, "Persisting ChannelManager..." ) ;
1297
1306
( kv_store. write (
@@ -1302,23 +1311,6 @@ impl BackgroundProcessor {
1302
1311
) ) ?;
1303
1312
log_trace ! ( logger, "Done persisting ChannelManager." ) ;
1304
1313
}
1305
- if last_freshness_call. elapsed ( ) > FRESHNESS_TIMER {
1306
- log_trace ! ( logger, "Calling ChannelManager's timer_tick_occurred" ) ;
1307
- channel_manager. get_cm ( ) . timer_tick_occurred ( ) ;
1308
- last_freshness_call = Instant :: now ( ) ;
1309
- }
1310
- if last_onion_message_handler_call. elapsed ( ) > ONION_MESSAGE_HANDLER_TIMER {
1311
- if let Some ( om) = & onion_messenger {
1312
- log_trace ! ( logger, "Calling OnionMessageHandler's timer_tick_occurred" ) ;
1313
- om. get_om ( ) . timer_tick_occurred ( ) ;
1314
- }
1315
- last_onion_message_handler_call = Instant :: now ( ) ;
1316
- }
1317
- if last_ping_call. elapsed ( ) > PING_TIMER {
1318
- log_trace ! ( logger, "Calling PeerManager's timer_tick_occurred" ) ;
1319
- peer_manager. as_ref ( ) . timer_tick_occurred ( ) ;
1320
- last_ping_call = Instant :: now ( ) ;
1321
- }
1322
1314
1323
1315
// Note that we want to run a graph prune once not long after startup before
1324
1316
// falling back to our usual hourly prunes. This avoids short-lived clients never
@@ -1386,18 +1378,30 @@ impl BackgroundProcessor {
1386
1378
}
1387
1379
last_scorer_persist_call = Instant :: now ( ) ;
1388
1380
}
1389
- if last_rebroadcast_call. elapsed ( ) > REBROADCAST_TIMER {
1390
- log_trace ! ( logger, "Rebroadcasting monitor's pending claims" ) ;
1391
- chain_monitor. rebroadcast_pending_claims ( ) ;
1392
- last_rebroadcast_call = Instant :: now ( ) ;
1393
- }
1394
1381
if last_sweeper_call. elapsed ( ) > SWEEPER_TIMER {
1395
1382
log_trace ! ( logger, "Regenerating sweeper spends if necessary" ) ;
1396
1383
if let Some ( ref sweeper) = sweeper {
1397
1384
let _ = sweeper. regenerate_and_broadcast_spend_if_necessary ( ) ;
1398
1385
}
1399
1386
last_sweeper_call = Instant :: now ( ) ;
1400
1387
}
1388
+ if last_onion_message_handler_call. elapsed ( ) > ONION_MESSAGE_HANDLER_TIMER {
1389
+ if let Some ( om) = & onion_messenger {
1390
+ log_trace ! ( logger, "Calling OnionMessageHandler's timer_tick_occurred" ) ;
1391
+ om. get_om ( ) . timer_tick_occurred ( ) ;
1392
+ }
1393
+ last_onion_message_handler_call = Instant :: now ( ) ;
1394
+ }
1395
+ if last_ping_call. elapsed ( ) > PING_TIMER {
1396
+ log_trace ! ( logger, "Calling PeerManager's timer_tick_occurred" ) ;
1397
+ peer_manager. as_ref ( ) . timer_tick_occurred ( ) ;
1398
+ last_ping_call = Instant :: now ( ) ;
1399
+ }
1400
+ if last_rebroadcast_call. elapsed ( ) > REBROADCAST_TIMER {
1401
+ log_trace ! ( logger, "Rebroadcasting monitor's pending claims" ) ;
1402
+ chain_monitor. rebroadcast_pending_claims ( ) ;
1403
+ last_rebroadcast_call = Instant :: now ( ) ;
1404
+ }
1401
1405
}
1402
1406
1403
1407
// After we exit, ensure we persist the ChannelManager one final time - this avoids
0 commit comments