From f1219788972c7b6b66199c54f499ff4057583ed2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Timo=20K=C3=B6sters?= <timo@koesters.xyz>
Date: Tue, 20 Jul 2021 23:36:03 +0200
Subject: [PATCH] fix: state bug

---
 src/database/sending.rs | 18 +++++-------------
 src/server_server.rs    |  2 ++
 2 files changed, 7 insertions(+), 13 deletions(-)

diff --git a/src/database/sending.rs b/src/database/sending.rs
index 44d19ed27..a07192e8f 100644
--- a/src/database/sending.rs
+++ b/src/database/sending.rs
@@ -165,9 +165,8 @@ pub fn start_handler(
                                 let new_events = guard.sending.servernamepduids
                                     .scan_prefix(prefix.clone())
                                     .filter_map(|(k, _)| {
-                                        Self::parse_servercurrentevent(&k).ok()
+                                        Self::parse_servercurrentevent(&k).ok().map(|ev| (ev, k))
                                     })
-                                    .map(|(_, event)| event)
                                     .take(30)
                                     .collect::<Vec<_>>();
 
@@ -175,16 +174,9 @@ pub fn start_handler(
 
                                 if !new_events.is_empty() {
                                     // Insert pdus we found
-                                    for event in &new_events {
-                                        let mut current_key = prefix.clone();
-                                        match event {
-                                            SendingEventType::Pdu(b) |
-                                            SendingEventType::Edu(b) => {
-                                                current_key.extend_from_slice(&b);
-                                                guard.sending.servercurrentevents.insert(&current_key, &[]).unwrap();
-                                                guard.sending.servernamepduids.remove(&current_key).unwrap();
-                                             }
-                                        }
+                                    for (_, key) in &new_events {
+                                        guard.sending.servercurrentevents.insert(&key, &[]).unwrap();
+                                        guard.sending.servernamepduids.remove(&key).unwrap();
                                     }
 
                                     drop(guard);
@@ -192,7 +184,7 @@ pub fn start_handler(
                                     futures.push(
                                         Self::handle_events(
                                             outgoing_kind.clone(),
-                                            new_events,
+                                            new_events.into_iter().map(|(event, _)| event.1).collect(),
                                             Arc::clone(&db),
                                         )
                                     );
diff --git a/src/server_server.rs b/src/server_server.rs
index 5ab8646c7..f666188bc 100644
--- a/src/server_server.rs
+++ b/src/server_server.rs
@@ -1058,6 +1058,8 @@ pub fn handle_incoming_pdu<'a>(
                 if let Some(state_key) = &prev_pdu.state_key {
                     state.insert((prev_pdu.kind.clone(), state_key.clone()), prev_pdu);
                 }
+
+                state_at_incoming_event = Some(state);
             }
             // TODO: set incoming_auth_events?
         }
-- 
GitLab