From bec90a9f094a75b6c098c332c90bb30948904981 Mon Sep 17 00:00:00 2001 From: Maxence Henneron Date: Tue, 7 Jul 2026 14:58:27 -0700 Subject: [PATCH] guard vfsMap with a mutex registering a new vfs writes vfsMap while callbacks read it from other threads, which trips the runtime concurrent map access check --- sqlite3vfscgo.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/sqlite3vfscgo.go b/sqlite3vfscgo.go index 0f5f7b9..9a0629f 100644 --- a/sqlite3vfscgo.go +++ b/sqlite3vfscgo.go @@ -15,6 +15,7 @@ import ( ) var ( + vfsMux sync.RWMutex vfsMap = make(map[string]ExtendedVFSv1) fileMux sync.Mutex @@ -23,7 +24,9 @@ var ( ) func newVFS(name string, goVFS ExtendedVFSv1, maxPathName int) error { + vfsMux.Lock() vfsMap[name] = goVFS + vfsMux.Unlock() rc := C.s3vfsNew(C.CString(name), C.int(maxPathName)) if rc == C.SQLITE_OK { @@ -495,7 +498,10 @@ func goVFSFileControl(cfile *C.sqlite3_file, op C.int, pArg unsafe.Pointer) C.in func vfsFromC(cvfs *C.sqlite3_vfs) ExtendedVFSv1 { vfsName := C.GoString(cvfs.zName) - return vfsMap[vfsName] + vfsMux.RLock() + vfs := vfsMap[vfsName] + vfsMux.RUnlock() + return vfs } func errToC(err error) C.int {