From 9976fe3d07174c8f64572367b23c21663bc3548c Mon Sep 17 00:00:00 2001 From: Ivan FB Date: Fri, 29 May 2026 11:30:24 +0200 Subject: [PATCH] use ref object for large events to avoid expensive deep copies --- channels/rate_limit_manager/rate_limit_manager.nim | 2 +- channels/reliable_channel.nim | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/channels/rate_limit_manager/rate_limit_manager.nim b/channels/rate_limit_manager/rate_limit_manager.nim index 5ea6486a5..ab5a9f67b 100644 --- a/channels/rate_limit_manager/rate_limit_manager.nim +++ b/channels/rate_limit_manager/rate_limit_manager.nim @@ -29,7 +29,7 @@ EventBroker: ## ## `channelId` lets listeners filter to their own channel, since all ## reliable channels share the underlying Waku node's broker context. - type ReadyToSendEvent* = object + type ReadyToSendEvent* = ref object channelId*: SdsChannelID msgs*: seq[seq[byte]] diff --git a/channels/reliable_channel.nim b/channels/reliable_channel.nim index 656521dd4..662ed5276 100644 --- a/channels/reliable_channel.nim +++ b/channels/reliable_channel.nim @@ -166,7 +166,7 @@ proc onMessageError(self: ReliableChannel, messagingReqId: RequestId) = self.pruneCompletedChannelReqs() proc onReadyToSend( - self: ReliableChannel, msgs: sink seq[seq[byte]] + self: ReliableChannel, readyToSendEvent: ReadyToSendEvent ) {.async: (raises: []).} = ## Tail of the outgoing pipeline. Invoked from the `ReadyToSendEvent` ## listener once `rate_limit_manager` releases a batch of opaque @@ -174,7 +174,7 @@ proc onReadyToSend( ## ## ... -> rate_limit_manager -> [encryption] -> dispatch var idx = 0 - for m in msgs: + for m in readyToSendEvent.msgs: ## The first `AwaitingRateLimit` entry in push order is the one ## this `m` belongs to: `send()` adds one entry per segment, and ## `rate_limit_manager` re-emits them in the same FIFO order, so @@ -395,7 +395,7 @@ proc new*( chn.brokerCtx, proc(evt: ReadyToSendEvent): Future[void] {.async: (raises: []).} = if evt.channelId == chn.channelId: - await chn.onReadyToSend(evt.msgs) + await chn.onReadyToSend(evt) , )