fix: Mark state and auth chain events as referenced after joining a room

It's generally safe to assume that all of these events have been referenced by the time we get to joining.
This commit is contained in:
timedout committed 2026-10-12 22:28:50 +01:00
1 parent bc70c4eaff
commit 511e791b9f
1 file changed
+9 -7
+9 -7
View File
@@ -1,4 +1,4 @@
use std::{collections::HashMap, sync::Arc};
use std::{collections::HashMap, iter::once, sync::Arc};
use conduwuit::{
Err, Event, Pdu, Result, Server, debug, debug_info, debug_warn, defer, err, error, info,
@@ -533,6 +533,9 @@ pub async fn join_remote_room(
}
self.services.outlier.add_pdu_outlier(&event_id, &value);
self.services.pdu_metadata.clear_pdu_markers(&event_id);
self.services
.pdu_metadata
.mark_as_referenced(room_id, once(event_id.as_ref()));
if let Some(state_key) = &pdu.state_key {
let shortstatekey = self
.services
@@ -565,6 +568,9 @@ pub async fn join_remote_room(
trace!(%event_id, "Adding PDU as an outlier from send_join auth_chain");
self.services.outlier.add_pdu_outlier(&event_id, &value);
self.services.pdu_metadata.clear_pdu_markers(&event_id);
self.services
.pdu_metadata
.mark_as_referenced(room_id, once(event_id.as_ref()));
let state_key = value
.get("state_key")
.and_then(|s| s.as_str())
@@ -672,7 +678,7 @@ pub async fn join_remote_room(
.append_pdu(
&parsed_join_pdu,
join_event,
std::iter::once(parsed_join_pdu.event_id.as_ref()),
once(parsed_join_pdu.event_id.as_ref()),
&state_lock,
room_id,
)
@@ -698,11 +704,7 @@ pub async fn join_remote_room(
info!("Replacing local forward extremities");
self.services
.state
.set_forward_extremities(
room_id,
std::iter::once(parsed_join_pdu.event_id()),
&state_lock,
)
.set_forward_extremities(room_id, once(parsed_join_pdu.event_id()), &state_lock)
.await;
}
drop(cork);