From ec82367c5052277dce22b484620f8a1483ace306 Mon Sep 17 00:00:00 2001 From: Josh Creek <8179928+jcreek@users.noreply.github.com> Date: Tue, 1 Sep 2026 16:28:08 +0100 Subject: [PATCH] fix(multiplayer): close initial connect sweep rows --- server/store/initial_connect_maintenance.go | 27 ++++++++++++++++----- 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/server/store/initial_connect_maintenance.go b/server/store/initial_connect_maintenance.go index a0d8e87a..2d08f45b 100644 --- a/server/store/initial_connect_maintenance.go +++ b/server/store/initial_connect_maintenance.go @@ -33,14 +33,29 @@ func ReconcileInitialConnect(ctx context.Context, db *sql.DB, now time.Time, lim return 0, err } defer rows.Close() - count := 0 + type candidate struct { + matchID string + playlist string + readyAt time.Time + } + var candidates []candidate for rows.Next() { var matchID, playlist string var readyAt time.Time if err := rows.Scan(&matchID, &playlist, &readyAt); err != nil { - return count, err + return 0, err } - participants, err := loadInitialConnectSnapshot(ctx, db, matchID) + candidates = append(candidates, candidate{matchID: matchID, playlist: playlist, readyAt: readyAt}) + } + if err := rows.Err(); err != nil { + return 0, err + } + if err := rows.Close(); err != nil { + return 0, err + } + count := 0 + for _, candidate := range candidates { + participants, err := loadInitialConnectSnapshot(ctx, db, candidate.matchID) if err != nil { return count, err } @@ -48,14 +63,14 @@ func ReconcileInitialConnect(ctx context.Context, db *sql.DB, now time.Time, lim if err != nil { return count, err } - plan, err := domain.PlanInitialConnect(domain.Playlist(playlist), readyAt, now, participants, history) + plan, err := domain.PlanInitialConnect(domain.Playlist(candidate.playlist), candidate.readyAt, now, participants, history) if err != nil { - return count, fmt.Errorf("plan initial connect %s: %w", matchID, err) + return count, fmt.Errorf("plan initial connect %s: %w", candidate.matchID, err) } if plan.Action == domain.InitialConnectWait { continue } - if err := ApplyInitialConnectPlan(ctx, db, matchID, "initial-connect:"+matchID, plan, now); err != nil { + if err := ApplyInitialConnectPlan(ctx, db, candidate.matchID, "initial-connect:"+candidate.matchID, plan, now); err != nil { return count, err } count++