diff options
| author | Daniel Theophanes <kardianos@gmail.com> | 2016-11-16 11:33:38 -0800 |
|---|---|---|
| committer | Ian Lance Taylor <iant@golang.org> | 2016-11-16 22:21:02 +0000 |
| commit | 49b77a87974c310b1d6a8437f3490f81811b2058 (patch) | |
| tree | 856edb2aff9ff42afd392c0b4b904b6ca9c5c337 /src/database/sql/sql.go | |
| parent | 81627f0e47f91a6e6e7bfd7c59b4e3ac596668ca (diff) | |
| download | go-49b77a87974c310b1d6a8437f3490f81811b2058.tar.xz | |
database/sql: guard against driver.Stmt.Close panics
Do not retain a lock when driver.Stmt.Close panic as the rest
of the sql package ensures.
Updates #16019
Change-Id: Idc7ea9258ae23f491e79cce3efc365684a708428
Reviewed-on: https://go-review.googlesource.com/33328
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
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-- |
