@@ -86,7 +86,7 @@ pub struct OnionMessenger<Signer: Sign, K: Deref, L: Deref>
8686{
8787 keys_manager : K ,
8888 logger : L ,
89- pending_messages : Mutex < HashMap < PublicKey , Vec < msgs:: OnionMessage > > > ,
89+ pending_messages : Mutex < HashMap < PublicKey , VecDeque < msgs:: OnionMessage > > > ,
9090 secp_ctx : Secp256k1 < secp256k1:: All > ,
9191 // Coming soon:
9292 // invoice_handler: InvoiceHandler,
@@ -170,8 +170,8 @@ impl<Signer: Sign, K: Deref, L: Deref> OnionMessenger<Signer, K, L>
170170 packet_payloads, packet_keys, prng_seed) . map_err ( |( ) | SendError :: TooBigPacket ) ?;
171171
172172 let mut pending_per_peer_msgs = self . pending_messages . lock ( ) . unwrap ( ) ;
173- let pending_msgs = pending_per_peer_msgs. entry ( introduction_node_id) . or_insert ( Vec :: new ( ) ) ;
174- pending_msgs. push (
173+ let pending_msgs = pending_per_peer_msgs. entry ( introduction_node_id) . or_insert_with ( VecDeque :: new) ;
174+ pending_msgs. push_back (
175175 msgs:: OnionMessage {
176176 blinding_point,
177177 onion_routing_packet : onion_packet,
@@ -181,7 +181,7 @@ impl<Signer: Sign, K: Deref, L: Deref> OnionMessenger<Signer, K, L>
181181 }
182182
183183 #[ cfg( test) ]
184- pub ( super ) fn release_pending_msgs ( & self ) -> HashMap < PublicKey , Vec < msgs:: OnionMessage > > {
184+ pub ( super ) fn release_pending_msgs ( & self ) -> HashMap < PublicKey , VecDeque < msgs:: OnionMessage > > {
185185 let mut pending_msgs = self . pending_messages . lock ( ) . unwrap ( ) ;
186186 let mut msgs = HashMap :: new ( ) ;
187187 core:: mem:: swap ( & mut * pending_msgs, & mut msgs) ;
@@ -253,8 +253,8 @@ impl<Signer: Sign, K: Deref, L: Deref> OnionMessageHandler for OnionMessenger<Si
253253 } ;
254254
255255 let mut pending_per_peer_msgs = self . pending_messages . lock ( ) . unwrap ( ) ;
256- let pending_msgs = pending_per_peer_msgs. entry ( next_node_id) . or_insert ( Vec :: new ( ) ) ;
257- pending_msgs. push (
256+ let pending_msgs = pending_per_peer_msgs. entry ( next_node_id) . or_insert_with ( VecDeque :: new) ;
257+ pending_msgs. push_back (
258258 msgs:: OnionMessage {
259259 blinding_point : match next_blinding_override {
260260 Some ( blinding_point) => blinding_point,
@@ -295,6 +295,10 @@ impl<Signer: Sign, K: Deref, L: Deref> OnionMessageProvider for OnionMessenger<S
295295 L :: Target : Logger ,
296296{
297297 fn next_onion_message_for_peer ( & self , peer_node_id : PublicKey ) -> Option < msgs:: OnionMessage > {
298+ let mut pending_msgs = self . pending_messages . lock ( ) . unwrap ( ) ;
299+ if let Some ( msgs) = pending_msgs. get_mut ( & peer_node_id) {
300+ return msgs. pop_front ( )
301+ }
298302 None
299303 }
300304}
0 commit comments