database/sql: use method values instead of generating closures Reduces garbage. R=adg, r CC=dsymonds, gobot, golang-dev https://golang.org/cl/9088045
diff --git a/src/pkg/database/sql/sql.go b/src/pkg/database/sql/sql.go index a80782b..968cb74 100644 --- a/src/pkg/database/sql/sql.go +++ b/src/pkg/database/sql/sql.go
@@ -219,6 +219,10 @@ dbmuClosed bool // same as closed, but guarded by db.mu, for connIfFree } +func (dc *driverConn) releaseConn(err error) { + dc.db.putConn(dc, err) +} + func (dc *driverConn) removeOpenStmt(si driver.Stmt) { dc.Lock() defer dc.Unlock() @@ -367,10 +371,7 @@ if !done { return func() error { return nil } } - return func() error { - //println(fmt.Sprintf("calling final close on %T %v (%#v)", x, x, x)) - return x.finalClose() - } + return x.finalClose } // Open opens a database specified by its database driver name and a @@ -710,9 +711,7 @@ return nil, err } - releaseConn := func(err error) { db.putConn(ci, err) } - - return db.queryConn(ci, releaseConn, query, args) + return db.queryConn(ci, ci.releaseConn, query, args) } // queryConn executes a query on the given connection. @@ -1154,8 +1153,7 @@ } conn := cs.dc - releaseConn = func(err error) { s.db.putConn(conn, err) } - return conn, releaseConn, cs.si, nil + return conn, conn.releaseConn, cs.si, nil } // Query executes a prepared query statement with the given arguments