race detected in modernc.org/sqlite/lib._sqlite3MutexInit()
I have a strange issue where the Go race detector detects data races on modernc.org/sqlite/lib._sqlite3MutexInit()
during unit tests. The unit tests all use different databases on their own so this looks like a data race issue in the library itself.
An open source repo where this happens is https://github.com/firefart/websitewatcher
Library Version: modernc.org/sqlite v1.37.0
Here is an example output from a run on github actions
task: [deps] go mod tidy -v
task: [sqlc] go tool sqlc generate
task: [templ] go tool templ generate
(✓) Complete [ updates=18 duration=6.063705ms ]
task: [templ] go tool templ fmt .
(✓) Format Complete [ count=1 errors=0 changed=0 duration=9.506794ms ]
task: [test] go test -race -cover ./...
github.com/firefart/websitewatcher coverage: 0.0% of statements
github.com/firefart/websitewatcher/internal/config coverage: 0.0% of statements
==================
WARNING: DATA RACE
Read at 0x00000151e410 by goroutine 11:
modernc.org/sqlite/lib._sqlite3MutexInit()
/home/runner/go/pkg/mod/modernc.org/sqlite@v1.37.0/lib/sqlite_linux_amd64.go:16636 +0x30
modernc.org/sqlite/lib.Xsqlite3_initialize()
/home/runner/go/pkg/mod/modernc.org/sqlite@v1.37.0/lib/sqlite_linux_amd64.go:163731 +0x7d
modernc.org/sqlite/lib._openDatabase()
/home/runner/go/pkg/mod/modernc.org/sqlite@v1.37.0/lib/sqlite_linux_amd64.go:166455 +0x268
modernc.org/sqlite/lib.Xsqlite3_open_v2()
/home/runner/go/pkg/mod/modernc.org/sqlite@v1.37.0/lib/sqlite_linux_amd64.go:166674 +0x204
modernc.org/sqlite.(*conn).openV2()
/home/runner/go/pkg/mod/modernc.org/sqlite@v1.37.0/sqlite.go:1393 +0x1c9
modernc.org/sqlite.newConn()
/home/runner/go/pkg/mod/modernc.org/sqlite@v1.37.0/sqlite.go:845 +0x21d
modernc.org/sqlite.(*Driver).Open()
/home/runner/go/pkg/mod/modernc.org/sqlite@v1.37.0/sqlite.go:1999 +0x53
database/sql.dsnConnector.Connect()
/opt/hostedtoolcache/go/1.24.3/x64/src/database/sql/sql.go:809 +0x61
database/sql.(*dsnConnector).Connect()
<autogenerated>:1 +0x1f
database/sql.(*DB).conn()
/opt/hostedtoolcache/go/1.24.3/x64/src/database/sql/sql.go:1431 +0xed0
database/sql.(*DB).exec()
/opt/hostedtoolcache/go/1.24.3/x64/src/database/sql/sql.go:1689 +0x93
database/sql.(*DB).ExecContext.func1()
/opt/hostedtoolcache/go/1.24.3/x64/src/database/sql/sql.go:1672 +0xd5
database/sql.(*DB).retry()
/opt/hostedtoolcache/go/1.24.3/x64/src/database/sql/sql.go:1576 +0x4a
database/sql.(*DB).ExecContext()
/opt/hostedtoolcache/go/1.24.3/x64/src/database/sql/sql.go:1671 +0x184
github.com/firefart/websitewatcher/internal/database.newDatabase()
/home/runner/work/websitewatcher/websitewatcher/internal/database/database.go:116 +0xb0d
github.com/firefart/websitewatcher/internal/database.New()
/home/runner/work/websitewatcher/websitewatcher/internal/database/database.go:53 +0x19d
github.com/firefart/websitewatcher/internal/database_test.TestUpdateLastContent()
/home/runner/work/websitewatcher/websitewatcher/internal/database/database_test.go:95 +0x3d0
testing.tRunner()
/opt/hostedtoolcache/go/1.24.3/x64/src/testing/testing.go:1792 +0x225
testing.(*T).Run.gowrap1()
/opt/hostedtoolcache/go/1.24.3/x64/src/testing/testing.go:1851 +0x44
Previous write at 0x00000151e410 by goroutine 9:
modernc.org/sqlite/lib._sqlite3MutexInit()
/home/runner/go/pkg/mod/modernc.org/sqlite@v1.37.0/lib/sqlite_linux_amd64.go:16652 +0x60a
modernc.org/sqlite/lib.Xsqlite3_initialize()
/home/runner/go/pkg/mod/modernc.org/sqlite@v1.37.0/lib/sqlite_linux_amd64.go:163731 +0x7d
modernc.org/sqlite/lib._openDatabase()
/home/runner/go/pkg/mod/modernc.org/sqlite@v1.37.0/lib/sqlite_linux_amd64.go:166455 +0x268
modernc.org/sqlite/lib.Xsqlite3_open_v2()
/home/runner/go/pkg/mod/modernc.org/sqlite@v1.37.0/lib/sqlite_linux_amd64.go:166674 +0x204
modernc.org/sqlite.(*conn).openV2()
/home/runner/go/pkg/mod/modernc.org/sqlite@v1.37.0/sqlite.go:1393 +0x1c9
modernc.org/sqlite.newConn()
/home/runner/go/pkg/mod/modernc.org/sqlite@v1.37.0/sqlite.go:845 +0x21d
modernc.org/sqlite.(*Driver).Open()
/home/runner/go/pkg/mod/modernc.org/sqlite@v1.37.0/sqlite.go:1999 +0x53
database/sql.dsnConnector.Connect()
/opt/hostedtoolcache/go/1.24.3/x64/src/database/sql/sql.go:809 +0x61
database/sql.(*dsnConnector).Connect()
<autogenerated>:1 +0x1f
database/sql.(*DB).conn()
/opt/hostedtoolcache/go/1.24.3/x64/src/database/sql/sql.go:1431 +0xed0
database/sql.(*DB).exec()
/opt/hostedtoolcache/go/1.24.3/x64/src/database/sql/sql.go:1689 +0x93
database/sql.(*DB).ExecContext.func1()
/opt/hostedtoolcache/go/1.24.3/x64/src/database/sql/sql.go:1672 +0xd5
database/sql.(*DB).retry()
/opt/hostedtoolcache/go/1.24.3/x64/src/database/sql/sql.go:1576 +0x4a
database/sql.(*DB).ExecContext()
/opt/hostedtoolcache/go/1.24.3/x64/src/database/sql/sql.go:1671 +0x184
github.com/firefart/websitewatcher/internal/database.newDatabase()
/home/runner/work/websitewatcher/websitewatcher/internal/database/database.go:116 +0xb0d
github.com/firefart/websitewatcher/internal/database.New()
/home/runner/work/websitewatcher/websitewatcher/internal/database/database.go:53 +0x19d
github.com/firefart/websitewatcher/internal/database_test.TestNew()
/home/runner/work/websitewatcher/websitewatcher/internal/database/database_test.go:31 +0x3cf
testing.tRunner()
/opt/hostedtoolcache/go/1.24.3/x64/src/testing/testing.go:1792 +0x225
testing.(*T).Run.gowrap1()
/opt/hostedtoolcache/go/1.24.3/x64/src/testing/testing.go:1851 +0x44
Goroutine 11 (running) created at:
testing.(*T).Run()
/opt/hostedtoolcache/go/1.24.3/x64/src/testing/testing.go:1851 +0x8f2
testing.runTests.func1()
/opt/hostedtoolcache/go/1.24.3/x64/src/testing/testing.go:2279 +0x85
testing.tRunner()
/opt/hostedtoolcache/go/1.24.3/x64/src/testing/testing.go:1792 +0x225
testing.runTests()
/opt/hostedtoolcache/go/1.24.3/x64/src/testing/testing.go:2277 +0x96c
testing.(*M).Run()
/opt/hostedtoolcache/go/1.24.3/x64/src/testing/testing.go:2142 +0xeea
main.main()
_testmain.go:65 +0x164
Goroutine 9 (running) created at:
testing.(*T).Run()
/opt/hostedtoolcache/go/1.24.3/x64/src/testing/testing.go:1851 +0x8f2
testing.runTests.func1()
/opt/hostedtoolcache/go/1.24.3/x64/src/testing/testing.go:2279 +0x85
testing.tRunner()
/opt/hostedtoolcache/go/1.24.3/x64/src/testing/testing.go:1792 +0x225
testing.runTests()
/opt/hostedtoolcache/go/1.24.3/x64/src/testing/testing.go:2277 +0x96c
testing.(*M).Run()
/opt/hostedtoolcache/go/1.24.3/x64/src/testing/testing.go:2142 +0xeea
main.main()
_testmain.go:65 +0x164
==================
==================
WARNING: DATA RACE
Read at 0x00000151e400 by goroutine 11:
modernc.org/sqlite/lib._sqlite3MutexInit()
/home/runner/go/pkg/mod/modernc.org/sqlite@v1.37.0/lib/sqlite_linux_amd64.go:16654 +0x62d
modernc.org/sqlite/lib.Xsqlite3_initialize()
/home/runner/go/pkg/mod/modernc.org/sqlite@v1.37.0/lib/sqlite_linux_amd64.go:163731 +0x7d
modernc.org/sqlite/lib._openDatabase()
/home/runner/go/pkg/mod/modernc.org/sqlite@v1.37.0/lib/sqlite_linux_amd64.go:166455 +0x268
modernc.org/sqlite/lib.Xsqlite3_open_v2()
/home/runner/go/pkg/mod/modernc.org/sqlite@v1.37.0/lib/sqlite_linux_amd64.go:166674 +0x204
modernc.org/sqlite.(*conn).openV2()
/home/runner/go/pkg/mod/modernc.org/sqlite@v1.37.0/sqlite.go:1393 +0x1c9
modernc.org/sqlite.newConn()
/home/runner/go/pkg/mod/modernc.org/sqlite@v1.37.0/sqlite.go:845 +0x21d
modernc.org/sqlite.(*Driver).Open()
/home/runner/go/pkg/mod/modernc.org/sqlite@v1.37.0/sqlite.go:1999 +0x53
database/sql.dsnConnector.Connect()
/opt/hostedtoolcache/go/1.24.3/x64/src/database/sql/sql.go:809 +0x61
database/sql.(*dsnConnector).Connect()
<autogenerated>:1 +0x1f
database/sql.(*DB).conn()
/opt/hostedtoolcache/go/1.24.3/x64/src/database/sql/sql.go:1431 +0xed0
database/sql.(*DB).exec()
/opt/hostedtoolcache/go/1.24.3/x64/src/database/sql/sql.go:1689 +0x93
database/sql.(*DB).ExecContext.func1()
/opt/hostedtoolcache/go/1.24.3/x64/src/database/sql/sql.go:1672 +0xd5
database/sql.(*DB).retry()
/opt/hostedtoolcache/go/1.24.3/x64/src/database/sql/sql.go:1576 +0x4a
database/sql.(*DB).ExecContext()
/opt/hostedtoolcache/go/1.24.3/x64/src/database/sql/sql.go:1671 +0x184
github.com/firefart/websitewatcher/internal/database.newDatabase()
/home/runner/work/websitewatcher/websitewatcher/internal/database/database.go:116 +0xb0d
github.com/firefart/websitewatcher/internal/database.New()
/home/runner/work/websitewatcher/websitewatcher/internal/database/database.go:53 +0x19d
github.com/firefart/websitewatcher/internal/database_test.TestUpdateLastContent()
/home/runner/work/websitewatcher/websitewatcher/internal/database/database_test.go:95 +0x3d0
testing.tRunner()
/opt/hostedtoolcache/go/1.24.3/x64/src/testing/testing.go:1792 +0x225
testing.(*T).Run.gowrap1()
/opt/hostedtoolcache/go/1.24.3/x64/src/testing/testing.go:1851 +0x44
Previous write at 0x00000151e400 by goroutine 9:
modernc.org/sqlite/lib._sqlite3MutexInit()
/home/runner/go/pkg/mod/modernc.org/sqlite@v1.37.0/lib/sqlite_linux_amd64.go:16643 +0x109
modernc.org/sqlite/lib.Xsqlite3_initialize()
/home/runner/go/pkg/mod/modernc.org/sqlite@v1.37.0/lib/sqlite_linux_amd64.go:163731 +0x7d
modernc.org/sqlite/lib._openDatabase()
/home/runner/go/pkg/mod/modernc.org/sqlite@v1.37.0/lib/sqlite_linux_amd64.go:166455 +0x268
modernc.org/sqlite/lib.Xsqlite3_open_v2()
/home/runner/go/pkg/mod/modernc.org/sqlite@v1.37.0/lib/sqlite_linux_amd64.go:166674 +0x204
modernc.org/sqlite.(*conn).openV2()
/home/runner/go/pkg/mod/modernc.org/sqlite@v1.37.0/sqlite.go:1393 +0x1c9
modernc.org/sqlite.newConn()
/home/runner/go/pkg/mod/modernc.org/sqlite@v1.37.0/sqlite.go:845 +0x21d
modernc.org/sqlite.(*Driver).Open()
/home/runner/go/pkg/mod/modernc.org/sqlite@v1.37.0/sqlite.go:1999 +0x53
database/sql.dsnConnector.Connect()
/opt/hostedtoolcache/go/1.24.3/x64/src/database/sql/sql.go:809 +0x61
database/sql.(*dsnConnector).Connect()
<autogenerated>:1 +0x1f
database/sql.(*DB).conn()
/opt/hostedtoolcache/go/1.24.3/x64/src/database/sql/sql.go:1431 +0xed0
database/sql.(*DB).exec()
/opt/hostedtoolcache/go/1.24.3/x64/src/database/sql/sql.go:1689 +0x93
database/sql.(*DB).ExecContext.func1()
/opt/hostedtoolcache/go/1.24.3/x64/src/database/sql/sql.go:1672 +0xd5
database/sql.(*DB).retry()
/opt/hostedtoolcache/go/1.24.3/x64/src/database/sql/sql.go:1576 +0x4a
database/sql.(*DB).ExecContext()
/opt/hostedtoolcache/go/1.24.3/x64/src/database/sql/sql.go:1671 +0x184
github.com/firefart/websitewatcher/internal/database.newDatabase()
/home/runner/work/websitewatcher/websitewatcher/internal/database/database.go:116 +0xb0d
github.com/firefart/websitewatcher/internal/database.New()
/home/runner/work/websitewatcher/websitewatcher/internal/database/database.go:53 +0x19d
github.com/firefart/websitewatcher/internal/database_test.TestNew()
/home/runner/work/websitewatcher/websitewatcher/internal/database/database_test.go:31 +0x3cf
testing.tRunner()
/opt/hostedtoolcache/go/1.24.3/x64/src/testing/testing.go:1792 +0x225
testing.(*T).Run.gowrap1()
/opt/hostedtoolcache/go/1.24.3/x64/src/testing/testing.go:1851 +0x44
Goroutine 11 (running) created at:
testing.(*T).Run()
/opt/hostedtoolcache/go/1.24.3/x64/src/testing/testing.go:1851 +0x8f2
testing.runTests.func1()
/opt/hostedtoolcache/go/1.24.3/x64/src/testing/testing.go:2279 +0x85
testing.tRunner()
/opt/hostedtoolcache/go/1.24.3/x64/src/testing/testing.go:1792 +0x225
testing.runTests()
/opt/hostedtoolcache/go/1.24.3/x64/src/testing/testing.go:2277 +0x96c
testing.(*M).Run()
/opt/hostedtoolcache/go/1.24.3/x64/src/testing/testing.go:2142 +0xeea
main.main()
_testmain.go:65 +0x164
Goroutine 9 (running) created at:
testing.(*T).Run()
/opt/hostedtoolcache/go/1.24.3/x64/src/testing/testing.go:1851 +0x8f2
testing.runTests.func1()
/opt/hostedtoolcache/go/1.24.3/x64/src/testing/testing.go:2279 +0x85
testing.tRunner()
/opt/hostedtoolcache/go/1.24.3/x64/src/testing/testing.go:1792 +0x225
testing.runTests()
/opt/hostedtoolcache/go/1.24.3/x64/src/testing/testing.go:2277 +0x96c
testing.(*M).Run()
/opt/hostedtoolcache/go/1.24.3/x64/src/testing/testing.go:2142 +0xeea
main.main()
_testmain.go:65 +0x164
==================
--- FAIL: TestNew (0.15s)
testing.go:1490: race detected during execution of test
--- FAIL: TestPrepareDatabase (0.16s)
testing.go:1490: race detected during execution of test
--- FAIL: TestUpdateLastContent (0.16s)
testing.go:1490: race detected during execution of test
--- FAIL: TestInsertAndGetLastContent (0.16s)
testing.go:1490: race detected during execution of test
FAIL
coverage: 73.8% of statements
FAIL github.com/firefart/websitewatcher/internal/database 0.204s
github.com/firefart/websitewatcher/internal/database/sqlc coverage: 0.0% of statements
github.com/firefart/websitewatcher/internal/diff coverage: 0.0% of statements
github.com/firefart/websitewatcher/internal/helper coverage: 0.0% of statements
github.com/firefart/websitewatcher/internal/http coverage: 0.0% of statements
github.com/firefart/websitewatcher/internal/mail coverage: 0.0% of statements
github.com/firefart/websitewatcher/internal/taskmanager coverage: 0.0% of statements
ok github.com/firefart/websitewatcher/internal/watch 1.015s coverage: 23.8% of statements
github.com/firefart/websitewatcher/internal/webhook coverage: 0.0% of statements
FAIL
task: Failed to run task "test": exit status 1
Edited by firefart