@@ -86,7 +86,7 @@ pub struct OnionMessenger<Signer: Sign, K: Deref, L: Deref>
86
86
{
87
87
keys_manager : K ,
88
88
logger : L ,
89
- pending_messages : Mutex < HashMap < PublicKey , Vec < msgs:: OnionMessage > > > ,
89
+ pending_messages : Mutex < HashMap < PublicKey , VecDeque < msgs:: OnionMessage > > > ,
90
90
secp_ctx : Secp256k1 < secp256k1:: All > ,
91
91
// Coming soon:
92
92
// invoice_handler: InvoiceHandler,
@@ -170,8 +170,8 @@ impl<Signer: Sign, K: Deref, L: Deref> OnionMessenger<Signer, K, L>
170
170
packet_payloads, packet_keys, prng_seed) . map_err ( |( ) | SendError :: TooBigPacket ) ?;
171
171
172
172
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 ( VecDeque :: new ( ) ) ;
174
+ pending_msgs. push_back (
175
175
msgs:: OnionMessage {
176
176
blinding_point,
177
177
onion_routing_packet : onion_packet,
@@ -181,7 +181,7 @@ impl<Signer: Sign, K: Deref, L: Deref> OnionMessenger<Signer, K, L>
181
181
}
182
182
183
183
#[ 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 > > {
185
185
let mut pending_msgs = self . pending_messages . lock ( ) . unwrap ( ) ;
186
186
let mut msgs = HashMap :: new ( ) ;
187
187
core:: mem:: swap ( & mut * pending_msgs, & mut msgs) ;
@@ -253,8 +253,8 @@ impl<Signer: Sign, K: Deref, L: Deref> OnionMessageHandler for OnionMessenger<Si
253
253
} ;
254
254
255
255
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 ( VecDeque :: new ( ) ) ;
257
+ pending_msgs. push_back (
258
258
msgs:: OnionMessage {
259
259
blinding_point : match next_blinding_override {
260
260
Some ( blinding_point) => blinding_point,
@@ -295,6 +295,10 @@ impl<Signer: Sign, K: Deref, L: Deref> OnionMessageProvider for OnionMessenger<S
295
295
L :: Target : Logger ,
296
296
{
297
297
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
+ }
298
302
None
299
303
}
300
304
}
0 commit comments