diff --git a/vfs/memdb/memdb.go b/vfs/memdb/memdb.go index 984d408..5e7f168 100644 --- a/vfs/memdb/memdb.go +++ b/vfs/memdb/memdb.go @@ -187,17 +187,11 @@ func (m *memFile) Lock(lock vfs.LockLevel) error { m.lockMtx.Lock() defer m.lockMtx.Unlock() - deadline := time.Now().Add(time.Millisecond) switch lock { case vfs.LOCK_SHARED: - for m.pending != nil { - if time.Now().After(deadline) { - return sqlite3.BUSY - } - m.lockMtx.Unlock() - runtime.Gosched() - m.lockMtx.Lock() + if m.pending != nil { + return sqlite3.BUSY } m.shared++ @@ -216,8 +210,8 @@ func (m *memFile) Lock(lock vfs.LockLevel) error { m.pending = m } - for m.shared > 1 { - if time.Now().After(deadline) { + for start := time.Now(); m.shared > 1; { + if time.Since(start) > time.Millisecond { return sqlite3.BUSY } m.lockMtx.Unlock() diff --git a/vfs/readervfs/api.go b/vfs/readervfs/api.go index eed04f3..8cc38ef 100644 --- a/vfs/readervfs/api.go +++ b/vfs/readervfs/api.go @@ -28,7 +28,7 @@ var ( ) // Create creates an immutable database from reader. -// The caller should insure that data from reader does not mutate, +// The caller should ensure that data from reader does not mutate, // otherwise SQLite might return incorrect query results and/or [sqlite3.CORRUPT] errors. func Create(name string, reader SizeReaderAt) { readerMtx.Lock() diff --git a/vfs/readervfs/reader.go b/vfs/readervfs/reader.go index 6ba29d8..53b8ba0 100644 --- a/vfs/readervfs/reader.go +++ b/vfs/readervfs/reader.go @@ -37,7 +37,7 @@ func (readerVFS) FullPathname(name string) (string, error) { type readerFile struct{ SizeReaderAt } -func (r readerFile) Close() error { +func (readerFile) Close() error { return nil }