@@ -166,22 +166,27 @@ enum OnionMessageBuffer {
166166	/// Messages for a node connected as a peer. 
167167ConnectedPeer ( VecDeque < OnionMessage > ) , 
168168
169- 	/// Messages for a node that is not yet connected. 
170- PendingConnection ( VecDeque < OnionMessage > ,  Option < NodeAnnouncement > ) , 
169+ 	/// Messages for a node that is not yet connected, which are dropped after a certain number of 
170+ /// timer ticks defined in OnionMessenger::release_pending_connections and tracked here. 
171+ PendingConnection ( VecDeque < OnionMessage > ,  Option < NodeAnnouncement > ,  usize ) , 
171172} 
172173
173174impl  OnionMessageBuffer  { 
175+ 	fn  pending_connection ( node_announcement :  NodeAnnouncement )  -> Self  { 
176+ 		Self :: PendingConnection ( VecDeque :: new ( ) ,  Some ( node_announcement) ,  0 ) 
177+ 	} 
178+ 
174179	fn  pending_messages ( & self )  -> & VecDeque < OnionMessage >  { 
175180		match  self  { 
176181			OnionMessageBuffer :: ConnectedPeer ( pending_messages)  => pending_messages, 
177- 			OnionMessageBuffer :: PendingConnection ( pending_messages,  _)  => pending_messages, 
182+ 			OnionMessageBuffer :: PendingConnection ( pending_messages,  _,  _ )  => pending_messages, 
178183		} 
179184	} 
180185
181186	fn  enqueue_message ( & mut  self ,  message :  OnionMessage )  { 
182187		let  pending_messages = match  self  { 
183188			OnionMessageBuffer :: ConnectedPeer ( pending_messages)  => pending_messages, 
184- 			OnionMessageBuffer :: PendingConnection ( pending_messages,  _)  => pending_messages, 
189+ 			OnionMessageBuffer :: PendingConnection ( pending_messages,  _,  _ )  => pending_messages, 
185190		} ; 
186191
187192		pending_messages. push_back ( message) ; 
@@ -190,7 +195,7 @@ impl OnionMessageBuffer {
190195	fn  dequeue_message ( & mut  self )  -> Option < OnionMessage >  { 
191196		let  pending_messages = match  self  { 
192197			OnionMessageBuffer :: ConnectedPeer ( pending_messages)  => pending_messages, 
193- 			OnionMessageBuffer :: PendingConnection ( pending_messages,  _)  => pending_messages, 
198+ 			OnionMessageBuffer :: PendingConnection ( pending_messages,  _,  _ )  => pending_messages, 
194199		} ; 
195200
196201		pending_messages. pop_front ( ) 
@@ -200,14 +205,14 @@ impl OnionMessageBuffer {
200205	fn  release_pending_messages ( & mut  self )  -> VecDeque < OnionMessage >  { 
201206		let  pending_messages = match  self  { 
202207			OnionMessageBuffer :: ConnectedPeer ( pending_messages)  => pending_messages, 
203- 			OnionMessageBuffer :: PendingConnection ( pending_messages,  _)  => pending_messages, 
208+ 			OnionMessageBuffer :: PendingConnection ( pending_messages,  _,  _ )  => pending_messages, 
204209		} ; 
205210
206211		core:: mem:: take ( pending_messages) 
207212	} 
208213
209214	fn  mark_connected ( & mut  self )  { 
210- 		if  let  OnionMessageBuffer :: PendingConnection ( pending_messages,  _)  = self  { 
215+ 		if  let  OnionMessageBuffer :: PendingConnection ( pending_messages,  _,  _ )  = self  { 
211216			let  mut  new_pending_messages = VecDeque :: new ( ) ; 
212217			core:: mem:: swap ( pending_messages,  & mut  new_pending_messages) ; 
213218			* self  = OnionMessageBuffer :: ConnectedPeer ( new_pending_messages) ; 
@@ -652,7 +657,9 @@ where
652657					if  node_announcement. contents . features . supports_onion_messages ( )  { 
653658						self . message_buffers . lock ( ) . unwrap ( ) 
654659							. entry ( first_node_id) 
655- 							. or_insert_with ( || OnionMessageBuffer :: PendingConnection ( VecDeque :: new ( ) ,  Some ( node_announcement. clone ( ) ) ) ) 
660+ 							. or_insert_with ( 
661+ 								|| OnionMessageBuffer :: pending_connection ( node_announcement. clone ( ) ) 
662+ 							) 
656663							. enqueue_message ( onion_message) ; 
657664						log_trace ! ( 
658665							self . logger,  "Buffered onion message waiting on peer connection {}: {:?}" , 
@@ -797,22 +804,23 @@ where
797804	} 
798805
799806	fn  release_pending_connections ( & self )  -> Vec < NodeAnnouncement >  { 
807+ 		const  MAX_TIMER_TICKS :  usize  = 2 ; 
800808		let  mut  message_buffers = self . message_buffers . lock ( ) . unwrap ( ) ; 
801809
802- 		// Drop any pending recipients since the last call  to avoid retaining buffered messages for 
810+ 		// Drop any pending recipients over MAX_TIMER_TICKS  to avoid retaining buffered messages for 
803811		// too long. 
804812		message_buffers. retain ( |_,  recipient| match  recipient { 
805- 			OnionMessageBuffer :: PendingConnection ( _,  None )  => false , 
806- 			OnionMessageBuffer :: PendingConnection ( _,  Some ( _) )  => true , 
813+ 			OnionMessageBuffer :: PendingConnection ( _,  _,  ticks)  => * ticks < MAX_TIMER_TICKS , 
807814			_ => true , 
808815		} ) ; 
809816
810- 		// Release node announcements for pending recipients so that their buffered messages are  
811- 		// dropped the next time this method is called . 
817+ 		// Release node announcements and increment a timer tick  for pending recipients so that 
818+ 		// their buffered messages are dropped at MAX_TIMER_TICKS . 
812819		message_buffers
813820			. values_mut ( ) 
814821			. filter_map ( |recipient| match  recipient { 
815- 				OnionMessageBuffer :: PendingConnection ( _,  node_announcement)  => { 
822+ 				OnionMessageBuffer :: PendingConnection ( _,  node_announcement,  ticks)  => { 
823+ 					* ticks += 1 ; 
816824					node_announcement. take ( ) 
817825				} , 
818826				_ => None , 
0 commit comments