Skip to content

Commit f542c2b

Browse files
Limit OnionMessenger event buffer size.
1 parent 7cca736 commit f542c2b

File tree

1 file changed

+13
-2
lines changed

1 file changed

+13
-2
lines changed

lightning/src/onion_message/messenger.rs

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -921,6 +921,17 @@ where
921921
}
922922
msgs
923923
}
924+
925+
fn enqueue_event(&self, event: Event) {
926+
const MAX_EVENTS_BUFFER_SIZE: usize = (1 << 10) * 256;
927+
let mut pending_events = self.pending_events.lock().unwrap();
928+
let total_buffered_bytes: usize = pending_events
929+
.iter()
930+
.map(|ev| ev.serialized_length())
931+
.sum();
932+
if total_buffered_bytes >= MAX_EVENTS_BUFFER_SIZE { return }
933+
pending_events.push(event);
934+
}
924935
}
925936

926937
fn outbound_buffer_full(peer_node_id: &PublicKey, buffer: &HashMap<PublicKey, OnionMessageRecipient>) -> bool {
@@ -1035,7 +1046,7 @@ where
10351046
log_trace!(logger, "Forwarding an onion message to peer {}", next_node_id);
10361047
},
10371048
_ if self.intercept_oms_for_offline_peers => {
1038-
self.pending_events.lock().unwrap().push(
1049+
self.enqueue_event(
10391050
Event::OnionMessageForOfflinePeer {
10401051
peer_node_id: next_node_id, message: onion_message
10411052
}
@@ -1063,7 +1074,7 @@ where
10631074
.or_insert_with(|| OnionMessageRecipient::ConnectedPeer(VecDeque::new()))
10641075
.mark_connected();
10651076
if self.intercept_oms_for_offline_peers {
1066-
self.pending_events.lock().unwrap().push(
1077+
self.enqueue_event(
10671078
Event::OnionMessagePeerConnected { peer_node_id: *their_node_id }
10681079
);
10691080
}

0 commit comments

Comments
 (0)