From 569232dc083e6dbcaab291f39bd5f78af2aedf08 Mon Sep 17 00:00:00 2001 From: Yasuhiro Matsumoto Date: Wed, 2 Aug 2017 00:06:18 +0900 Subject: [PATCH] fix possibly double Close. fixes #448 --- sqlite3.go | 14 +++++++++----- sqlite3_test/{sqltest.go => sqlite3_test.go} | 0 2 files changed, 9 insertions(+), 5 deletions(-) rename sqlite3_test/{sqltest.go => sqlite3_test.go} (100%) diff --git a/sqlite3.go b/sqlite3.go index 2ebf7e7..3fc7354 100644 --- a/sqlite3.go +++ b/sqlite3.go @@ -167,7 +167,7 @@ type SQLiteDriver struct { // SQLiteConn implement sql.Conn. type SQLiteConn struct { - dbMu sync.Mutex + mu sync.Mutex db *C.sqlite3 loc *time.Location txlock string @@ -197,6 +197,7 @@ type SQLiteResult struct { // SQLiteRows implement sql.Rows. type SQLiteRows struct { + mu sync.Mutex s *SQLiteStmt nc int cols []string @@ -761,9 +762,9 @@ func (c *SQLiteConn) Close() error { return c.lastError() } deleteHandles(c) - c.dbMu.Lock() + c.mu.Lock() c.db = nil - c.dbMu.Unlock() + c.mu.Unlock() runtime.SetFinalizer(c, nil) return nil } @@ -772,8 +773,8 @@ func (c *SQLiteConn) dbConnOpen() bool { if c == nil { return false } - c.dbMu.Lock() - defer c.dbMu.Unlock() + c.mu.Lock() + defer c.mu.Unlock() return c.db != nil } @@ -980,7 +981,10 @@ func (rc *SQLiteRows) Close() error { return nil } if rc.done != nil { + rc.mu.Lock() close(rc.done) + rc.done = nil + rc.mu.Unlock() } if rc.cls { return rc.s.Close() diff --git a/sqlite3_test/sqltest.go b/sqlite3_test/sqlite3_test.go similarity index 100% rename from sqlite3_test/sqltest.go rename to sqlite3_test/sqlite3_test.go