diff options
Diffstat (limited to 'src/database/sql/sql.go')
| -rw-r--r-- | src/database/sql/sql.go | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/src/database/sql/sql.go b/src/database/sql/sql.go index d3803e85c3..a549e859a4 100644 --- a/src/database/sql/sql.go +++ b/src/database/sql/sql.go @@ -408,17 +408,19 @@ func (dc *driverConn) Close() error { } func (dc *driverConn) finalClose() error { - dc.Lock() - - for si := range dc.openStmt { - si.Close() - } - dc.openStmt = nil + var err error + withLock(dc, func() { + defer func() { // In case si.Close panics. + dc.openStmt = nil + dc.finalClosed = true + err = dc.ci.Close() + dc.ci = nil + }() - err := dc.ci.Close() - dc.ci = nil - dc.finalClosed = true - dc.Unlock() + for si := range dc.openStmt { + si.Close() + } + }) dc.db.mu.Lock() dc.db.numOpen-- |
