From ae37f218a227fbc0d04e0fd5f6aaa6557480d987 Mon Sep 17 00:00:00 2001 From: timedout Date: Thu, 21 May 2026 21:24:00 +0100 Subject: [PATCH] perf: Avoid cloning incoming PDUs to check them Also allows us to store signatures on PDUs received over federation that we got a fresh signature for --- .../rooms/event_handler/upgrade_outlier_pdu.rs | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/service/rooms/event_handler/upgrade_outlier_pdu.rs b/src/service/rooms/event_handler/upgrade_outlier_pdu.rs index a1360cd72..d935b9079 100644 --- a/src/service/rooms/event_handler/upgrade_outlier_pdu.rs +++ b/src/service/rooms/event_handler/upgrade_outlier_pdu.rs @@ -9,10 +9,8 @@ use conduwuit::{ Err, Result, }; -use futures::{FutureExt, StreamExt, future::ready}; -use ruma::{ - CanonicalJsonValue, RoomId, ServerName, api::error::ErrorKind, events::StateEventType, -}; +use futures::{future::ready, FutureExt, StreamExt}; +use ruma::{api::error::ErrorKind, events::StateEventType, CanonicalJsonObject, CanonicalJsonValue, RoomId, ServerName}; use tokio::join; use super::get_room_version_rules; @@ -25,7 +23,7 @@ use crate::rooms::{ pub(super) async fn upgrade_outlier_to_timeline_pdu( &self, incoming_pdu: PduEvent, - val: BTreeMap, + mut val: CanonicalJsonObject, create_event: &Pdu, origin: &ServerName, room_id: &RoomId, @@ -250,11 +248,10 @@ where // no reason to re-calculate that. // 14-pre. ask the policy server to sign the event, if possible debug!(event_id = %incoming_pdu.event_id, "Checking policy server for event"); - let mut mutable_object = incoming_pdu.to_canonical_object(); if let Err(e) = self .policy_server_allows_event( &incoming_pdu, - &mut mutable_object, + &mut val, room_id, &room_version_rules, true,