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