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 ```text 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 ```
issue