diff --git a/src/github.com/matrix-org/dendrite/federationapi/routing/backfill.go b/src/github.com/matrix-org/dendrite/federationapi/routing/backfill.go index 37b11b7b2..935c33420 100644 --- a/src/github.com/matrix-org/dendrite/federationapi/routing/backfill.go +++ b/src/github.com/matrix-org/dendrite/federationapi/routing/backfill.go @@ -77,7 +77,9 @@ func Backfill( // Filter any event that's not from the requested room out. evs := make([]gomatrixserverlib.Event, 0) - for _, ev := range res.Events { + + var ev gomatrixserverlib.Event + for _, ev = range res.Events { if ev.RoomID() == roomID { evs = append(evs, ev) } diff --git a/src/github.com/matrix-org/dendrite/roomserver/query/query.go b/src/github.com/matrix-org/dendrite/roomserver/query/query.go index 390fe71d8..d2d08e249 100644 --- a/src/github.com/matrix-org/dendrite/roomserver/query/query.go +++ b/src/github.com/matrix-org/dendrite/roomserver/query/query.go @@ -497,6 +497,8 @@ func (r *RoomserverQueryAPI) scanEventTree( ) (resultNIDs []types.EventNID, err error) { var allowed bool var events []types.Event + var next []string + var pre string resultNIDs = make([]types.EventNID, 0, limit) @@ -505,7 +507,10 @@ func (r *RoomserverQueryAPI) scanEventTree( // "prev_event" key. BFSLoop: for len(front) > 0 { - var next []string + // Prevent unnecessary allocations: reset the slice only when not empty. + if len(next) > 0 { + next = make([]string, 0) + } // Retrieve the events to process from the database. events, err = r.DB.EventsFromIDs(ctx, front) if err != nil { @@ -520,7 +525,7 @@ BFSLoop: // Update the list of events to retrieve. resultNIDs = append(resultNIDs, ev.EventNID) // Loop through the event's parents. - for _, pre := range ev.PrevEventIDs() { + for _, pre = range ev.PrevEventIDs() { // Only add an event to the list of next events to process if it // hasn't been seen before. if !visited[pre] {