@@ -3,7 +3,6 @@ package serdes
33
44import (
55 "io"
6- "sync"
76
87 "github.com/ncruces/go-sqlite3"
98 "github.com/ncruces/go-sqlite3/vfs"
@@ -18,8 +17,7 @@ func init() {
1817// https://sqlite.org/c3ref/serialize.html
1918func Serialize (db * sqlite3.Conn , schema string ) ([]byte , error ) {
2019 var file sliceFile
21- openMtx .Lock ()
22- openFile = & file
20+ fileToOpen <- & file
2321 err := db .Backup (schema , "file:db?vfs=" + vfsName )
2422 return file .data , err
2523}
@@ -39,15 +37,11 @@ func Serialize(db *sqlite3.Conn, schema string) ([]byte, error) {
3937// ["memdb"]: https://pkg.go.dev/github.com/ncruces/go-sqlite3/vfs/memdb
4038// ["reader"]: https://pkg.go.dev/github.com/ncruces/go-sqlite3/vfs/readervfs
4139func Deserialize (db * sqlite3.Conn , schema string , data []byte ) error {
42- openMtx .Lock ()
43- openFile = & sliceFile {data }
40+ fileToOpen <- & sliceFile {data }
4441 return db .Restore (schema , "file:db?vfs=" + vfsName )
4542}
4643
47- var (
48- openMtx sync.Mutex
49- openFile * sliceFile
50- )
44+ var fileToOpen = make (chan * sliceFile , 1 )
5145
5246const vfsName = "github.com/ncruces/go-sqlite3/ext/deserialize.sliceVFS"
5347
@@ -58,16 +52,7 @@ func (sliceVFS) Open(name string, flags vfs.OpenFlag) (vfs.File, vfs.OpenFlag, e
5852 // notest // OPEN_MEMORY
5953 return nil , flags , sqlite3 .CANTOPEN
6054 }
61-
62- file := openFile
63- openFile = nil
64- openMtx .Unlock ()
65-
66- if file .data != nil {
67- flags |= vfs .OPEN_READONLY
68- }
69- flags |= vfs .OPEN_MEMORY
70- return file , flags , nil
55+ return <- fileToOpen , flags | vfs .OPEN_MEMORY , nil
7156}
7257
7358func (sliceVFS ) Delete (name string , dirSync bool ) error {
0 commit comments