From: Brad Fitzpatrick Date: Tue, 14 May 2013 23:35:31 +0000 (-0700) Subject: database/sql: use method values instead of generating closures X-Git-Tag: go1.2rc2~1516 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=0bbf0ec0ed5c17a76942d9ae8a6e6b9559dacb9e;p=gostls13.git 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 a80782bfed..968cb74752 100644 --- a/src/pkg/database/sql/sql.go +++ b/src/pkg/database/sql/sql.go @@ -219,6 +219,10 @@ type driverConn struct { 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 @@ func (db *DB) removeDepLocked(x finalCloser, dep interface{}) func() error { 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 @@ func (db *DB) query(query string, args []interface{}) (*Rows, error) { 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 @@ func (s *Stmt) connStmt() (ci *driverConn, releaseConn func(error), si driver.St } 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