-
-
Notifications
You must be signed in to change notification settings - Fork 33
Closed
Labels
bugSomething isn't workingSomething isn't working
Description
module temp
go 1.16
require zombiezen.com/go/sqlite v0.5.0 // indirect
package main
import (
"context"
"fmt"
"sync"
"zombiezen.com/go/sqlite"
"zombiezen.com/go/sqlite/sqlitex"
)
func main() {
var wg sync.WaitGroup
for i := 0; i < 32; i++ {
go func() { defer wg.Done(); f() }()
}
wg.Wait()
}
func f() {
var (
ctx = context.Background()
uri = "file::memory:?mode=memory&cache=shared"
flags = sqlite.OpenReadWrite | sqlite.OpenCreate | sqlite.OpenURI | sqlite.OpenNoMutex
poolSize = 32
)
pool, err := sqlitex.Open(uri, flags, poolSize)
if err != nil {
panic(err)
}
defer pool.Close()
conn := pool.Get(ctx)
if conn == nil {
panic(fmt.Errorf("nil conn"))
}
defer pool.Put(conn)
if err := sqlitex.Exec(conn, `SELECT 1;`, nil); err != nil {
panic(err)
}
}
$ go run -race main.go
==================
WARNING: DATA RACE
Read at 0x000001b620d4 by goroutine 20:
modernc.org/sqlite/lib.Xsqlite3_initialize()
/Users/pbourgon/pkg/mod/modernc.org/[email protected]/lib/sqlite_darwin_amd64.go:158713 +0x158
modernc.org/sqlite/lib.openDatabase()
/Users/pbourgon/pkg/mod/modernc.org/[email protected]/lib/sqlite_darwin_amd64.go:161013 +0x364
modernc.org/sqlite/lib.Xsqlite3_open_v2()
/Users/pbourgon/pkg/mod/modernc.org/[email protected]/lib/sqlite_darwin_amd64.go:161348 +0x684
zombiezen.com/go/sqlite.openConn()
/Users/pbourgon/pkg/mod/zombiezen.com/go/[email protected]/sqlite.go:136 +0x648
zombiezen.com/go/sqlite.OpenConn()
/Users/pbourgon/pkg/mod/zombiezen.com/go/[email protected]/sqlite.go:80 +0xe7
zombiezen.com/go/sqlite/sqlitex.Open()
/Users/pbourgon/pkg/mod/zombiezen.com/go/[email protected]/sqlitex/pool.go:103 +0x2e8
main.f()
/var/folders/m4/192hdv6n19j9x2v86k1r29rw0000gn/T/tmp.z2VKC9Xr/main.go:28 +0x8f
main.main.func1()
/var/folders/m4/192hdv6n19j9x2v86k1r29rw0000gn/T/tmp.z2VKC9Xr/main.go:15 +0x64
Previous write at 0x000001b620d4 by goroutine 19:
modernc.org/sqlite/lib.Xsqlite3_initialize()
/Users/pbourgon/pkg/mod/modernc.org/[email protected]/lib/sqlite_darwin_amd64.go:158728 +0x65b
modernc.org/sqlite/lib.openDatabase()
/Users/pbourgon/pkg/mod/modernc.org/[email protected]/lib/sqlite_darwin_amd64.go:161013 +0x364
modernc.org/sqlite/lib.Xsqlite3_open_v2()
/Users/pbourgon/pkg/mod/modernc.org/[email protected]/lib/sqlite_darwin_amd64.go:161348 +0x684
zombiezen.com/go/sqlite.openConn()
/Users/pbourgon/pkg/mod/zombiezen.com/go/[email protected]/sqlite.go:136 +0x648
zombiezen.com/go/sqlite.OpenConn()
/Users/pbourgon/pkg/mod/zombiezen.com/go/[email protected]/sqlite.go:80 +0xe7
zombiezen.com/go/sqlite/sqlitex.Open()
/Users/pbourgon/pkg/mod/zombiezen.com/go/[email protected]/sqlitex/pool.go:103 +0x2e8
main.f()
/var/folders/m4/192hdv6n19j9x2v86k1r29rw0000gn/T/tmp.z2VKC9Xr/main.go:28 +0x8f
main.main.func1()
/var/folders/m4/192hdv6n19j9x2v86k1r29rw0000gn/T/tmp.z2VKC9Xr/main.go:15 +0x64
Goroutine 20 (running) created at:
main.main()
/var/folders/m4/192hdv6n19j9x2v86k1r29rw0000gn/T/tmp.z2VKC9Xr/main.go:15 +0x94
Goroutine 19 (running) created at:
main.main()
/var/folders/m4/192hdv6n19j9x2v86k1r29rw0000gn/T/tmp.z2VKC9Xr/main.go:15 +0x94
==================
Found 1 data race(s)
exit status 66
Protecting the OpenConn call with a mutex solves it, apparently.
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't working