Closed
Description
Issue description
When I investing #1390, I found XORM used sql.RawBytes
for ScanType. It was XORM bug.
But we have same bug!
Lines 190 to 195 in cffc85c
Example code
https://github.com/methane/notes/blob/master/2023/go-mysql-race/main.go
Error log
$ go run -race .
Hello, 0 Hello, 0 Hello, 0 Hello, 0 Hello, 0
==================
WARNING: DATA RACE
Read at 0x00c000166040 by goroutine 8:
runtime.slicebytetostring()
/opt/homebrew/Cellar/go/1.20.3/libexec/src/runtime/string.go:81 +0x0
main.main.func1()
/Users/inada-n/notes/2023/go-mysql-race/main.go:46 +0x64
main.main.func3()
/Users/inada-n/notes/2023/go-mysql-race/main.go:52 +0x78
Previous write at 0x00c000166040 by main goroutine:
runtime.racewriterange()
<autogenerated>:1 +0x14
internal/poll.ignoringEINTRIO()
/opt/homebrew/Cellar/go/1.20.3/libexec/src/internal/poll/fd_unix.go:794 +0x2ec
internal/poll.(*FD).Read()
/opt/homebrew/Cellar/go/1.20.3/libexec/src/internal/poll/fd_unix.go:163 +0x20
net.(*netFD).Read()
/opt/homebrew/Cellar/go/1.20.3/libexec/src/net/fd_posix.go:55 +0x44
net.(*conn).Read()
/opt/homebrew/Cellar/go/1.20.3/libexec/src/net/net.go:183 +0x84
net.(*TCPConn).Read()
<autogenerated>:1 +0x4c
github.com/go-sql-driver/mysql.(*buffer).fill()
/Users/inada-n/go/pkg/mod/github.com/go-sql-driver/[email protected]/buffer.go:90 +0x33c
github.com/go-sql-driver/mysql.(*buffer).readNext()
/Users/inada-n/go/pkg/mod/github.com/go-sql-driver/[email protected]/buffer.go:119 +0x54
github.com/go-sql-driver/mysql.(*mysqlConn).readPacket()
/Users/inada-n/go/pkg/mod/github.com/go-sql-driver/[email protected]/packets.go:32 +0xa4
github.com/go-sql-driver/mysql.(*mysqlStmt).readPrepareResultPacket()
/Users/inada-n/go/pkg/mod/github.com/go-sql-driver/[email protected]/packets.go:830 +0x38
github.com/go-sql-driver/mysql.(*mysqlConn).Prepare()
/Users/inada-n/go/pkg/mod/github.com/go-sql-driver/[email protected]/connection.go:182 +0x2e8
github.com/go-sql-driver/mysql.(*mysqlConn).PrepareContext()
/Users/inada-n/go/pkg/mod/github.com/go-sql-driver/[email protected]/connection.go:533 +0x58
database/sql.ctxDriverPrepare()
/opt/homebrew/Cellar/go/1.20.3/libexec/src/database/sql/ctxutil.go:15 +0x11c
database/sql.(*DB).queryDC.func2()
/opt/homebrew/Cellar/go/1.20.3/libexec/src/database/sql/sql.go:1770 +0x88
database/sql.withLock()
/opt/homebrew/Cellar/go/1.20.3/libexec/src/database/sql/sql.go:3405 +0x84
database/sql.(*DB).queryDC()
/opt/homebrew/Cellar/go/1.20.3/libexec/src/database/sql/sql.go:1769 +0x25c
database/sql.(*DB).query()
/opt/homebrew/Cellar/go/1.20.3/libexec/src/database/sql/sql.go:1726 +0xf0
database/sql.(*DB).QueryContext.func1()
/opt/homebrew/Cellar/go/1.20.3/libexec/src/database/sql/sql.go:1704 +0x9c
database/sql.(*DB).retry()
/opt/homebrew/Cellar/go/1.20.3/libexec/src/database/sql/sql.go:1538 +0x4c
database/sql.(*DB).QueryContext()
/opt/homebrew/Cellar/go/1.20.3/libexec/src/database/sql/sql.go:1703 +0xc8
database/sql.(*DB).Query()
/opt/homebrew/Cellar/go/1.20.3/libexec/src/database/sql/sql.go:1717 +0x144
main.main()
/Users/inada-n/notes/2023/go-mysql-race/main.go:28 +0xf0
Goroutine 8 (running) created at:
main.main()
/Users/inada-n/notes/2023/go-mysql-race/main.go:43 +0x180
==================
Configuration
Driver version (or git SHA):
Go version: run go version
in your console
Server version: E.g. MySQL 5.6, MariaDB 10.0.20
Server OS: E.g. Debian 8.1 (Jessie), Windows 10
Metadata
Metadata
Assignees
Labels
No labels