From 0e9ad8cfd9d67d7aa0fd329e92d0f27c780ab34c Mon Sep 17 00:00:00 2001 From: gedi Date: Tue, 28 Dec 2021 16:55:34 +0200 Subject: [PATCH] proper lock fix for db driver --- db.go | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/db.go b/db.go index 3932a8f..46f0c0c 100644 --- a/db.go +++ b/db.go @@ -142,16 +142,12 @@ func (d *txDriver) Open(dsn string) (driver.Conn, error) { } d.conns[dsn] = c } - c.Lock() - defer c.Unlock() - c.opened++ + c.opened++ // safe since conn.Close() must acquire driver lock first return c, nil } func (d *txDriver) deleteConn(dsn string) error { - d.Lock() - defer d.Unlock() - + // d must be locked before call delete(d.conns, dsn) if len(d.conns) == 0 && d.db != nil { if err := d.db.Close(); err != nil { @@ -177,8 +173,8 @@ func (c *conn) beginOnce() (*sql.Tx, error) { } func (c *conn) Close() (err error) { - c.Lock() - defer c.Unlock() + c.drv.Lock() + defer c.drv.Unlock() c.opened-- if c.opened == 0 {