@@ -19,7 +19,7 @@ use bitcoin::blockdata::constants::ChainHash;
1919use bitcoin:: secp256k1:: { self , Secp256k1 , SecretKey , PublicKey } ;
2020
2121use crate :: sign:: { KeysManager , NodeSigner , Recipient } ;
22- use crate :: events:: { MessageSendEvent , MessageSendEventsProvider } ;
22+ use crate :: events:: { Event , EventHandler , EventsProvider , MessageSendEvent , MessageSendEventsProvider } ;
2323use crate :: ln:: ChannelId ;
2424use crate :: ln:: features:: { InitFeatures , NodeFeatures } ;
2525use crate :: ln:: msgs;
@@ -749,6 +749,9 @@ pub struct PeerManager<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, OM: D
749749 /// it finishes as another thread tried to start processing events but returned early.
750750 event_processing_state : AtomicI32 ,
751751
752+ /// Events (as opposed to MessageSendEvents) needing processing.
753+ pending_events : Mutex < Vec < Event > > ,
754+
752755 /// Used to track the last value sent in a node_announcement "timestamp" field. We ensure this
753756 /// value increases strictly since we don't assume access to a time source.
754757 last_node_announcement_serial : AtomicU32 ,
@@ -918,6 +921,7 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, OM: Deref, L: Deref, CM
918921 peers : FairRwLock :: new ( HashMap :: new ( ) ) ,
919922 node_id_to_descriptor : Mutex :: new ( HashMap :: new ( ) ) ,
920923 event_processing_state : AtomicI32 :: new ( 0 ) ,
924+ pending_events : Mutex :: new ( Vec :: new ( ) ) ,
921925 ephemeral_key_midstate,
922926 peer_counter : AtomicCounter :: new ( ) ,
923927 gossip_processing_backlogged : AtomicBool :: new ( false ) ,
@@ -2396,6 +2400,13 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, OM: Deref, L: Deref, CM
23962400 }
23972401 }
23982402 }
2403+
2404+ let nodes_to_connect =
2405+ self . message_handler . onion_message_handler . release_pending_connections ( ) ;
2406+ let mut pending_events = self . pending_events . lock ( ) . unwrap ( ) ;
2407+ for node_announcement in nodes_to_connect {
2408+ pending_events. push ( Event :: ConnectionNeeded { node_announcement } ) ;
2409+ }
23992410 }
24002411
24012412 #[ allow( dead_code) ]
@@ -2482,6 +2493,24 @@ fn is_gossip_msg(type_id: u16) -> bool {
24822493 }
24832494}
24842495
2496+ impl < Descriptor : SocketDescriptor , CM : Deref , RM : Deref , OM : Deref , L : Deref , CMH : Deref , NS : Deref >
2497+ EventsProvider for PeerManager < Descriptor , CM , RM , OM , L , CMH , NS >
2498+ where
2499+ CM :: Target : ChannelMessageHandler ,
2500+ RM :: Target : RoutingMessageHandler ,
2501+ OM :: Target : OnionMessageHandler ,
2502+ L :: Target : Logger ,
2503+ CMH :: Target : CustomMessageHandler ,
2504+ NS :: Target : NodeSigner ,
2505+ {
2506+ fn process_pending_events < H : Deref > ( & self , handler : H ) where H :: Target : EventHandler {
2507+ let pending_events = core:: mem:: take ( & mut * self . pending_events . lock ( ) . unwrap ( ) ) ;
2508+ for event in pending_events {
2509+ handler. handle_event ( event) ;
2510+ }
2511+ }
2512+ }
2513+
24852514#[ cfg( test) ]
24862515mod tests {
24872516 use crate :: sign:: { NodeSigner , Recipient } ;
0 commit comments