diff --git a/clientapi/routing/routing.go b/clientapi/routing/routing.go index 5e691e8ec..8cd207b7a 100644 --- a/clientapi/routing/routing.go +++ b/clientapi/routing/routing.go @@ -509,14 +509,14 @@ func Setup( // Defined outside of handler to persist between calls // TODO: clear based on some criteria - roomHierarchyPaginationCache := new(RoomHierarchyPaginationCache) + roomHierarchyPaginationCache := NewRoomHierarchyPaginationCache() v1mux.Handle("/rooms/{roomID}/hierarchy", httputil.MakeAuthAPI("spaces", userAPI, func(req *http.Request, device *userapi.Device) util.JSONResponse { vars, err := httputil.URLDecodeMapValues(mux.Vars(req)) if err != nil { return util.ErrorResponse(err) } - return QueryRoomHierarchy(req, device, vars["roomID"], rsAPI, roomHierarchyPaginationCache) + return QueryRoomHierarchy(req, device, vars["roomID"], rsAPI, &roomHierarchyPaginationCache) }, httputil.WithAllowGuests()), ).Methods(http.MethodGet, http.MethodOptions) diff --git a/roomserver/internal/query/query_room_hierarchy.go b/roomserver/internal/query/query_room_hierarchy.go index d10cae25e..a59c834d6 100644 --- a/roomserver/internal/query/query_room_hierarchy.go +++ b/roomserver/internal/query/query_room_hierarchy.go @@ -43,10 +43,10 @@ func (querier *Queryer) QueryNextRoomHierarchyPage(ctx context.Context, walker r return nil, nil, roomserver.ErrRoomUnknownOrNotAllowed{Err: fmt.Errorf("room is unknown/forbidden")} } - var discoveredRooms []fclient.MSC2946Room + discoveredRooms := []fclient.MSC2946Room{} - // Copy unvisited and processed to avoid modifying walker - unvisited := []roomserver.RoomHierarchyWalkerQueuedRoom{} + // Copy unvisited and processed to avoid modifying original walker (which is typically in cache) + unvisited := make([]roomserver.RoomHierarchyWalkerQueuedRoom, len(walker.Unvisited)) copy(unvisited, walker.Unvisited) processed := walker.Processed.Copy()