From 58904c86198a2a77fe809d8ac455a242996a9948 Mon Sep 17 00:00:00 2001 From: Bel LaPointe <153096461+breel-render@users.noreply.github.com> Date: Sun, 15 Dec 2024 00:45:27 -0700 Subject: [PATCH] if rw.Lock then no need for nested rw.RLock --- cmd/server/db.go | 19 +++++++++++++++---- cmd/server/games.go | 4 ++-- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/cmd/server/db.go b/cmd/server/db.go index 35bb4fb..ca10fdd 100644 --- a/cmd/server/db.go +++ b/cmd/server/db.go @@ -14,16 +14,19 @@ type DB struct { scheme string conn string rw *sync.RWMutex + locked *bool } func NewDB(ctx context.Context, scheme, conn string) (DB, error) { ctx, can := context.WithTimeout(ctx, time.Second*10) defer can() + locked := false db := DB{ scheme: scheme, conn: conn, rw: &sync.RWMutex{}, + locked: &locked, } sql, err := db.dial(ctx) @@ -38,12 +41,18 @@ func NewDB(ctx context.Context, scheme, conn string) (DB, error) { func (db DB) WithLock(cb func() error) error { db.rw.Lock() defer db.rw.Unlock() + *db.locked = true + defer func() { + *db.locked = false + }() return cb() } func (db DB) Exec(ctx context.Context, q string, args ...any) error { - db.rw.RLock() - defer db.rw.RUnlock() + if !*db.locked { + db.rw.RLock() + defer db.rw.RUnlock() + } return db.exec(ctx, q, args...) } @@ -59,8 +68,10 @@ func (db DB) exec(ctx context.Context, q string, args ...any) error { } func (db DB) Query(ctx context.Context, cb func(*sql.Rows) error, q string, args ...any) error { - db.rw.RLock() - defer db.rw.RUnlock() + if !*db.locked { + db.rw.RLock() + defer db.rw.RUnlock() + } return db.query(ctx, cb, q, args...) } diff --git a/cmd/server/games.go b/cmd/server/games.go index c7ac6f1..d74b0e7 100644 --- a/cmd/server/games.go +++ b/cmd/server/games.go @@ -51,7 +51,7 @@ func (games Games) GamesForUser(ctx context.Context, id string) ([]string, error }, ` SELECT players.game_uuid FROM players - WHERE players.user_uuid=? + WHERE players.user_uuid=? `, id) return result, err } @@ -225,7 +225,7 @@ func (games Games) createEvent(ctx context.Context, id string, v any) error { return games.db.Exec(ctx, ` INSERT INTO events ( - game_uuid, + game_uuid, timestamp, payload ) VALUES (?, ?, ?)