@@ -1007,6 +1007,17 @@ where
1007
1007
}
1008
1008
msgs
1009
1009
}
1010
+
1011
+ fn enqueue_event ( & self , event : Event ) {
1012
+ const MAX_EVENTS_BUFFER_SIZE : usize = ( 1 << 10 ) * 256 ;
1013
+ let mut pending_events = self . pending_events . lock ( ) . unwrap ( ) ;
1014
+ let total_buffered_bytes: usize = pending_events
1015
+ . iter ( )
1016
+ . map ( |ev| ev. serialized_length ( ) )
1017
+ . sum ( ) ;
1018
+ if total_buffered_bytes >= MAX_EVENTS_BUFFER_SIZE { return }
1019
+ pending_events. push ( event) ;
1020
+ }
1010
1021
}
1011
1022
1012
1023
fn outbound_buffer_full ( peer_node_id : & PublicKey , buffer : & HashMap < PublicKey , OnionMessageRecipient > ) -> bool {
@@ -1134,7 +1145,7 @@ where
1134
1145
log_trace ! ( logger, "Forwarding an onion message to peer {}" , next_node_id) ;
1135
1146
} ,
1136
1147
_ if self . intercept_oms_for_offline_peers => {
1137
- self . pending_events . lock ( ) . unwrap ( ) . push (
1148
+ self . enqueue_event (
1138
1149
Event :: OnionMessageForOfflinePeer {
1139
1150
peer_node_id : next_node_id, message : onion_message
1140
1151
}
@@ -1162,7 +1173,7 @@ where
1162
1173
. or_insert_with ( || OnionMessageRecipient :: ConnectedPeer ( VecDeque :: new ( ) ) )
1163
1174
. mark_connected ( ) ;
1164
1175
if self . intercept_oms_for_offline_peers {
1165
- self . pending_events . lock ( ) . unwrap ( ) . push (
1176
+ self . enqueue_event (
1166
1177
Event :: OnionMessagePeerConnected { peer_node_id : * their_node_id }
1167
1178
) ;
1168
1179
}
0 commit comments