From c82a72b179d680722d64f16bf03aeb10d1d60f20 Mon Sep 17 00:00:00 2001 From: Neil Alexander Date: Fri, 15 Jan 2021 14:32:27 +0000 Subject: [PATCH] Only do this for non-state events, since state events will always result in state change at extremities --- .../internal/input/input_latest_events.go | 46 ++++++++++--------- 1 file changed, 24 insertions(+), 22 deletions(-) diff --git a/roomserver/internal/input/input_latest_events.go b/roomserver/internal/input/input_latest_events.go index 9517350e9..c9264a27d 100644 --- a/roomserver/internal/input/input_latest_events.go +++ b/roomserver/internal/input/input_latest_events.go @@ -204,30 +204,32 @@ func (u *latestEventsUpdater) latestState() error { // Work out if the state at the extremities has actually changed // or not. If they haven't then we won't bother doing all of the // hard work. - stateChanged := false - oldStateNIDs := make([]types.StateSnapshotNID, 0, len(u.oldLatest)) - newStateNIDs := make([]types.StateSnapshotNID, 0, len(u.latest)) - for _, old := range u.oldLatest { - oldStateNIDs = append(oldStateNIDs, old.BeforeStateSnapshotNID) - } - for _, new := range u.latest { - newStateNIDs = append(newStateNIDs, new.BeforeStateSnapshotNID) - } - oldStateNIDs = state.UniqueStateSnapshotNIDs(oldStateNIDs) - newStateNIDs = state.UniqueStateSnapshotNIDs(newStateNIDs) - if len(oldStateNIDs) != len(newStateNIDs) { - stateChanged = true - } else { - for i := range oldStateNIDs { - if oldStateNIDs[i] != newStateNIDs[i] { - stateChanged = true - break + if u.event.StateKey() == nil { + stateChanged := false + oldStateNIDs := make([]types.StateSnapshotNID, 0, len(u.oldLatest)) + newStateNIDs := make([]types.StateSnapshotNID, 0, len(u.latest)) + for _, old := range u.oldLatest { + oldStateNIDs = append(oldStateNIDs, old.BeforeStateSnapshotNID) + } + for _, new := range u.latest { + newStateNIDs = append(newStateNIDs, new.BeforeStateSnapshotNID) + } + oldStateNIDs = state.UniqueStateSnapshotNIDs(oldStateNIDs) + newStateNIDs = state.UniqueStateSnapshotNIDs(newStateNIDs) + if len(oldStateNIDs) != len(newStateNIDs) { + stateChanged = true + } else { + for i := range oldStateNIDs { + if oldStateNIDs[i] != newStateNIDs[i] { + stateChanged = true + break + } } } - } - if !stateChanged { - u.newStateNID = u.oldStateNID - return nil + if !stateChanged { + u.newStateNID = u.oldStateNID + return nil + } } // Get a list of the current latest events. This may or may not