@@ -113,7 +113,7 @@ use lightning::routing::utxo::UtxoLookup;
113
113
use lightning:: util:: config:: { ChannelHandshakeConfig , ChannelHandshakeLimits , UserConfig } ;
114
114
use lightning:: util:: ser:: ReadableArgs ;
115
115
116
- use lightning_background_processor:: BackgroundProcessor ;
116
+ use lightning_background_processor:: process_events_async ;
117
117
use lightning_background_processor:: GossipSync as BPGossipSync ;
118
118
119
119
use lightning_transaction_sync:: EsploraSyncClient ;
@@ -565,9 +565,7 @@ impl Builder {
565
565
/// upon [`Node::stop()`].
566
566
struct Runtime {
567
567
tokio_runtime : Arc < tokio:: runtime:: Runtime > ,
568
- _background_processor : BackgroundProcessor ,
569
- stop_networking : Arc < AtomicBool > ,
570
- stop_wallet_sync : Arc < AtomicBool > ,
568
+ stop_runtime : Arc < AtomicBool > ,
571
569
}
572
570
573
571
/// The main interface object of LDK Node, wrapping the necessary LDK and BDK functionalities.
@@ -622,11 +620,10 @@ impl Node {
622
620
623
621
let runtime = run_lock. as_ref ( ) . unwrap ( ) ;
624
622
625
- // Stop wallet sync
626
- runtime. stop_wallet_sync . store ( true , Ordering :: Release ) ;
623
+ // Stop the runtime.
624
+ runtime. stop_runtime . store ( true , Ordering :: Release ) ;
627
625
628
- // Stop networking
629
- runtime. stop_networking . store ( true , Ordering :: Release ) ;
626
+ // Stop disconnect peers.
630
627
self . peer_manager . disconnect_all_peers ( ) ;
631
628
632
629
// Drop the held runtimes.
@@ -643,6 +640,8 @@ impl Node {
643
640
644
641
self . wallet . set_runtime ( Arc :: clone ( & tokio_runtime) ) ;
645
642
643
+ let stop_runtime = Arc :: new ( AtomicBool :: new ( false ) ) ;
644
+
646
645
let event_handler = Arc :: new ( EventHandler :: new (
647
646
Arc :: clone ( & self . wallet ) ,
648
647
Arc :: clone ( & self . event_queue ) ,
@@ -661,8 +660,7 @@ impl Node {
661
660
let sync_cman = Arc :: clone ( & self . channel_manager ) ;
662
661
let sync_cmon = Arc :: clone ( & self . chain_monitor ) ;
663
662
let sync_logger = Arc :: clone ( & self . logger ) ;
664
- let stop_wallet_sync = Arc :: new ( AtomicBool :: new ( false ) ) ;
665
- let stop_sync = Arc :: clone ( & stop_wallet_sync) ;
663
+ let stop_sync = Arc :: clone ( & stop_runtime) ;
666
664
667
665
std:: thread:: spawn ( move || {
668
666
tokio:: runtime:: Builder :: new_current_thread ( ) . enable_all ( ) . build ( ) . unwrap ( ) . block_on (
@@ -693,7 +691,7 @@ impl Node {
693
691
} ) ;
694
692
695
693
let sync_logger = Arc :: clone ( & self . logger ) ;
696
- let stop_sync = Arc :: clone ( & stop_wallet_sync ) ;
694
+ let stop_sync = Arc :: clone ( & stop_runtime ) ;
697
695
tokio_runtime. spawn ( async move {
698
696
loop {
699
697
if stop_sync. load ( Ordering :: Acquire ) {
@@ -718,11 +716,10 @@ impl Node {
718
716
}
719
717
} ) ;
720
718
721
- let stop_networking = Arc :: new ( AtomicBool :: new ( false ) ) ;
722
719
if let Some ( listening_address) = & self . config . listening_address {
723
720
// Setup networking
724
721
let peer_manager_connection_handler = Arc :: clone ( & self . peer_manager ) ;
725
- let stop_listen = Arc :: clone ( & stop_networking ) ;
722
+ let stop_listen = Arc :: clone ( & stop_runtime ) ;
726
723
let listening_address = listening_address. clone ( ) ;
727
724
728
725
tokio_runtime. spawn ( async move {
@@ -752,7 +749,7 @@ impl Node {
752
749
let connect_pm = Arc :: clone ( & self . peer_manager ) ;
753
750
let connect_logger = Arc :: clone ( & self . logger ) ;
754
751
let connect_peer_store = Arc :: clone ( & self . peer_store ) ;
755
- let stop_connect = Arc :: clone ( & stop_networking ) ;
752
+ let stop_connect = Arc :: clone ( & stop_runtime ) ;
756
753
tokio_runtime. spawn ( async move {
757
754
let mut interval = tokio:: time:: interval ( PEER_RECONNECTION_INTERVAL ) ;
758
755
loop {
@@ -785,19 +782,45 @@ impl Node {
785
782
} ) ;
786
783
787
784
// Setup background processing
788
- let _background_processor = BackgroundProcessor :: start (
789
- Arc :: clone ( & self . kv_store ) ,
790
- Arc :: clone ( & event_handler) ,
791
- Arc :: clone ( & self . chain_monitor ) ,
792
- Arc :: clone ( & self . channel_manager ) ,
793
- BPGossipSync :: p2p ( Arc :: clone ( & self . gossip_sync ) ) ,
794
- Arc :: clone ( & self . peer_manager ) ,
795
- Arc :: clone ( & self . logger ) ,
796
- Some ( Arc :: clone ( & self . scorer ) ) ,
797
- ) ;
785
+ let background_persister = Arc :: clone ( & self . kv_store ) ;
786
+ let background_event_handler = Arc :: clone ( & event_handler) ;
787
+ let background_chain_mon = Arc :: clone ( & self . chain_monitor ) ;
788
+ let background_chan_man = Arc :: clone ( & self . channel_manager ) ;
789
+ let background_gossip_sync = BPGossipSync :: p2p ( Arc :: clone ( & self . gossip_sync ) ) ;
790
+ let background_peer_man = Arc :: clone ( & self . peer_manager ) ;
791
+ let background_logger = Arc :: clone ( & self . logger ) ;
792
+ let background_scorer = Arc :: clone ( & self . scorer ) ;
793
+ let stop_background_processing = Arc :: clone ( & stop_runtime) ;
794
+ let sleeper = move |d| {
795
+ let stop = Arc :: clone ( & stop_background_processing) ;
796
+ Box :: pin ( async move {
797
+ if stop. load ( Ordering :: Acquire ) {
798
+ true
799
+ } else {
800
+ tokio:: time:: sleep ( d) . await ;
801
+ false
802
+ }
803
+ } )
804
+ } ;
805
+
806
+ tokio_runtime. spawn ( async move {
807
+ process_events_async (
808
+ background_persister,
809
+ |e| background_event_handler. handle_event ( e) ,
810
+ background_chain_mon,
811
+ background_chan_man,
812
+ background_gossip_sync,
813
+ background_peer_man,
814
+ background_logger,
815
+ Some ( background_scorer) ,
816
+ sleeper,
817
+ true ,
818
+ )
819
+ . await
820
+ . expect ( "Failed to process events" ) ;
821
+ } ) ;
798
822
799
- // TODO: frequently check back on background_processor if there was an error
800
- Ok ( Runtime { tokio_runtime, _background_processor, stop_networking, stop_wallet_sync } )
823
+ Ok ( Runtime { tokio_runtime, stop_runtime } )
801
824
}
802
825
803
826
/// Blocks until the next event is available.
0 commit comments