Don't populate duplicates into auth events

This commit is contained in:
Neil Alexander 2022-02-24 10:25:04 +00:00
parent fea8d152e7
commit 47e7045ca4
No known key found for this signature in database
GPG key ID: A02A2019A2BB0944

View file

@ -814,6 +814,7 @@ func (v *StateResolution) resolveConflictsV2(
// events may be duplicated across these sets but that's OK. // events may be duplicated across these sets but that's OK.
authSets := make(map[string][]*gomatrixserverlib.Event, len(conflicted)) authSets := make(map[string][]*gomatrixserverlib.Event, len(conflicted))
authEvents := make([]*gomatrixserverlib.Event, 0, estimate*3) authEvents := make([]*gomatrixserverlib.Event, 0, estimate*3)
gotAuthEvents := make(map[string]struct{}, estimate*3)
authDifference := make([]*gomatrixserverlib.Event, 0, estimate) authDifference := make([]*gomatrixserverlib.Event, 0, estimate)
// For each conflicted event, let's try and get the needed auth events. // For each conflicted event, let's try and get the needed auth events.
@ -850,8 +851,16 @@ func (v *StateResolution) resolveConflictsV2(
if err != nil { if err != nil {
return nil, err return nil, err
} }
for _, event := range authSets[key] {
if _, ok := gotAuthEvents[event.EventID()]; !ok {
authEvents = append(authEvents, authSets[key]...) authEvents = append(authEvents, authSets[key]...)
gotAuthEvents[event.EventID()] = struct{}{}
} }
}
}
// Let the GC get to this.
gotAuthEvents = nil // nolint:ineffassign
// This function helps us to work out whether an event exists in one of the // This function helps us to work out whether an event exists in one of the
// auth sets. // auth sets.