From 88bd90ef89007c7bb4da5409d079d0cdfb9e5d43 Mon Sep 17 00:00:00 2001 From: Elara Musayelyan Date: Fri, 6 Oct 2023 15:04:14 -0700 Subject: [PATCH] Make DB connection thread safe --- internal/db/db.go | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/internal/db/db.go b/internal/db/db.go index 2037fdb..5660bea 100644 --- a/internal/db/db.go +++ b/internal/db/db.go @@ -25,6 +25,7 @@ import ( "encoding/json" "errors" "fmt" + "sync" "github.com/jmoiron/sqlx" "go.elara.ws/lure/internal/config" @@ -66,6 +67,7 @@ type version struct { } var ( + mu sync.Mutex conn *sqlx.DB closed = true ) @@ -76,13 +78,18 @@ var ( func DB(ctx context.Context) *sqlx.DB { log := loggerctx.From(ctx) if conn != nil && !closed { - return conn + return getConn() } - db, err := open(ctx, config.GetPaths(ctx).DBPath) + _, err := open(ctx, config.GetPaths(ctx).DBPath) if err != nil { log.Fatal("Error opening database").Err(err).Send() } - conn = db + return getConn() +} + +func getConn() *sqlx.DB { + mu.Lock() + defer mu.Unlock() return conn } @@ -91,8 +98,11 @@ func open(ctx context.Context, dsn string) (*sqlx.DB, error) { if err != nil { return nil, err } + + mu.Lock() conn = db closed = false + mu.Unlock() err = initDB(ctx, dsn) if err != nil {