From eb8d9b95fd0ac914eb743587341fffa339ff7898 Mon Sep 17 00:00:00 2001 From: Nuno Cruces Date: Mon, 12 Jun 2023 13:04:37 +0100 Subject: [PATCH] Consistent lock timeouts. --- vfs/memdb/memdb.go | 14 ++++---------- vfs/readervfs/api.go | 2 +- vfs/readervfs/reader.go | 2 +- 3 files changed, 6 insertions(+), 12 deletions(-) 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 }