summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--changelog.d/17065.bugfix1
-rw-r--r--synapse/handlers/sync.py3
2 files changed, 4 insertions, 0 deletions
diff --git a/changelog.d/17065.bugfix b/changelog.d/17065.bugfix
new file mode 100644
index 0000000000..99ed435d75
--- /dev/null
+++ b/changelog.d/17065.bugfix
@@ -0,0 +1 @@
+Fix various long-standing bugs which could cause incorrect state to be returned from `/sync` in certain situations.
diff --git a/synapse/handlers/sync.py b/synapse/handlers/sync.py
index 7c29c15540..410805e806 100644
--- a/synapse/handlers/sync.py
+++ b/synapse/handlers/sync.py
@@ -1272,8 +1272,11 @@ class SyncHandler:
             for e in batch.events[1:]:
                 if e.prev_event_ids() != [prev_event_id]:
                     break
+                prev_event_id = e.event_id
             else:
                 is_linear_timeline = True
+        else:
+            is_linear_timeline = True
 
         if is_linear_timeline and not batch.limited:
             state_ids: StateMap[str] = {}