diff options
Diffstat (limited to 'src/database/sql/sql.go')
| -rw-r--r-- | src/database/sql/sql.go | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/src/database/sql/sql.go b/src/database/sql/sql.go index 2d1528a21f..b5a17f0fc1 100644 --- a/src/database/sql/sql.go +++ b/src/database/sql/sql.go @@ -1477,10 +1477,14 @@ func (s *Stmt) Exec(args ...interface{}) (Result, error) { return nil, driver.ErrBadConn } -func resultFromStatement(ds driverStmt, args ...interface{}) (Result, error) { +func driverNumInput(ds driverStmt) int { ds.Lock() - want := ds.si.NumInput() - ds.Unlock() + defer ds.Unlock() // in case NumInput panics + return ds.si.NumInput() +} + +func resultFromStatement(ds driverStmt, args ...interface{}) (Result, error) { + want := driverNumInput(ds) // -1 means the driver doesn't know how to count the number of // placeholders, so we won't sanity check input here and instead let the @@ -1495,8 +1499,8 @@ func resultFromStatement(ds driverStmt, args ...interface{}) (Result, error) { } ds.Lock() + defer ds.Unlock() resi, err := ds.si.Exec(dargs) - ds.Unlock() if err != nil { return nil, err } @@ -1927,6 +1931,6 @@ func stack() string { // withLock runs while holding lk. func withLock(lk sync.Locker, fn func()) { lk.Lock() + defer lk.Unlock() // in case fn panics fn() - lk.Unlock() } |
