From 12b0ba7cc6e49a8e522f49e598c84eb2869288d9 Mon Sep 17 00:00:00 2001 From: jianzhiyao <739319867@qq.com> Date: Sun, 21 Jun 2020 17:00:45 +0800 Subject: [PATCH] add double check for stmt --- prepare_stmt.go | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/prepare_stmt.go b/prepare_stmt.go index bc11abbf..cc4e40d7 100644 --- a/prepare_stmt.go +++ b/prepare_stmt.go @@ -14,13 +14,19 @@ type PreparedStmtDB struct { func (db *PreparedStmtDB) prepare(query string) (*sql.Stmt, error) { db.mux.RLock() - if stmt, ok := db.stmts[query]; ok { - db.mux.RUnlock() + stmt, ok := db.stmts[query] + db.mux.RUnlock() + if ok { return stmt, nil } - db.mux.RUnlock() db.mux.Lock() + stmt, ok = db.stmts[query] + if ok { + db.mux.Unlock() + return stmt, nil + } + stmt, err := db.ConnPool.PrepareContext(context.Background(), query) if err == nil { db.stmts[query] = stmt