From b0d592c3c9a356b661c2d6bb958528f2761d821e Mon Sep 17 00:00:00 2001 From: Daniel Theophanes Date: Sat, 10 Jun 2017 22:02:53 -0700 Subject: database/sql: prevent race on Rows close with Tx Rollback In addition to adding a guard to the Rows close, add a var in the fakeConn that gets read and written to on each operation, simulating writing or reading from the server. TestConcurrency/TxStmt* tests have been commented out as they now fail after checking for races on the fakeConn. See issue #20646 for more information. Fixes #20622 Change-Id: I80b36ea33d776e5b4968be1683ff8c61728ee1ea Reviewed-on: https://go-review.googlesource.com/45275 Run-TryBot: Daniel Theophanes TryBot-Result: Gobot Gobot Reviewed-by: Brad Fitzpatrick --- src/database/sql/sql.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'src/database/sql/sql.go') diff --git a/src/database/sql/sql.go b/src/database/sql/sql.go index f7919f983c..aa254b87a1 100644 --- a/src/database/sql/sql.go +++ b/src/database/sql/sql.go @@ -2700,7 +2700,9 @@ func (rs *Rows) close(err error) error { rs.lasterr = err } - err = rs.rowsi.Close() + withLock(rs.dc, func() { + err = rs.rowsi.Close() + }) if fn := rowsCloseHook(); fn != nil { fn(rs, &err) } -- cgit v1.3