Skip to content

Commit 58b66b7

Browse files
committed
Improved assertions.
1 parent e0c6086 commit 58b66b7

File tree

4 files changed

+22
-25
lines changed

4 files changed

+22
-25
lines changed

vfs/lock.go

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,10 @@ const (
2020
)
2121

2222
func (f *vfsFile) Lock(lock LockLevel) error {
23-
// Argument check. SQLite never explicitly requests a pending lock.
24-
if lock != LOCK_SHARED && lock != LOCK_RESERVED && lock != LOCK_EXCLUSIVE {
25-
panic(util.AssertErr())
26-
}
27-
2823
switch {
24+
case lock != LOCK_SHARED && lock != LOCK_RESERVED && lock != LOCK_EXCLUSIVE:
25+
// Argument check. SQLite never explicitly requests a pending lock.
26+
panic(util.AssertErr())
2927
case f.lock < LOCK_NONE || f.lock > LOCK_EXCLUSIVE:
3028
// Connection state check.
3129
panic(util.AssertErr())
@@ -87,13 +85,12 @@ func (f *vfsFile) Lock(lock LockLevel) error {
8785
}
8886

8987
func (f *vfsFile) Unlock(lock LockLevel) error {
90-
// Argument check.
91-
if lock != LOCK_NONE && lock != LOCK_SHARED {
88+
switch {
89+
case lock != LOCK_NONE && lock != LOCK_SHARED:
90+
// Argument check.
9291
panic(util.AssertErr())
93-
}
94-
95-
// Connection state check.
96-
if f.lock < LOCK_NONE || f.lock > LOCK_EXCLUSIVE {
92+
case f.lock < LOCK_NONE || f.lock > LOCK_EXCLUSIVE:
93+
// Connection state check.
9794
panic(util.AssertErr())
9895
}
9996

vfs/shm_bsd.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,7 @@ func (s *vfsShm) shmLock(offset, n int32, flags _ShmFlag) _ErrorCode {
208208
panic(util.AssertErr())
209209
}
210210

211-
// Reacquire the local lock.
211+
// Release the local lock we had acquired.
212212
if rc != _OK {
213213
s.shmMemLock(offset, n, flags^(_SHM_UNLOCK|_SHM_LOCK))
214214
}

vfs/shm_memlk.go

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,6 @@ func (s *vfsShm) shmMemLock(offset, n int32, flags _ShmFlag) _ErrorCode {
1010
case flags&_SHM_UNLOCK != 0:
1111
for i := offset; i < offset+n; i++ {
1212
if s.lock[i] {
13-
if s.vfsShmParent.lock[i] == 0 {
14-
panic(util.AssertErr())
15-
}
1613
if s.vfsShmParent.lock[i] <= 0 {
1714
s.vfsShmParent.lock[i] = 0
1815
} else {
@@ -23,20 +20,21 @@ func (s *vfsShm) shmMemLock(offset, n int32, flags _ShmFlag) _ErrorCode {
2320
}
2421
case flags&_SHM_SHARED != 0:
2522
for i := offset; i < offset+n; i++ {
26-
if s.lock[i] {
27-
panic(util.AssertErr())
28-
}
29-
if s.vfsShmParent.lock[i]+1 <= 0 {
23+
if !s.lock[i] &&
24+
s.vfsShmParent.lock[i]+1 <= 0 {
3025
return _BUSY
3126
}
3227
}
3328
for i := offset; i < offset+n; i++ {
34-
s.vfsShmParent.lock[i]++
35-
s.lock[i] = true
29+
if !s.lock[i] {
30+
s.vfsShmParent.lock[i]++
31+
s.lock[i] = true
32+
}
3633
}
3734
case flags&_SHM_EXCLUSIVE != 0:
3835
for i := offset; i < offset+n; i++ {
3936
if s.lock[i] {
37+
// SQLite never requests an exclusive lock that it already holds.
4038
panic(util.AssertErr())
4139
}
4240
if s.vfsShmParent.lock[i] != 0 {

vfs/shm_ofd.go

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,12 @@ func (s *vfsShm) shmMap(ctx context.Context, mod api.Module, id, size int32, ext
110110

111111
func (s *vfsShm) shmLock(offset, n int32, flags _ShmFlag) _ErrorCode {
112112
// Argument check.
113-
if n <= 0 || offset < 0 || offset+n > _SHM_NLOCK {
113+
switch {
114+
case n <= 0:
115+
panic(util.AssertErr())
116+
case offset < 0 || offset+n > _SHM_NLOCK:
117+
panic(util.AssertErr())
118+
case n != 1 && flags&_SHM_EXCLUSIVE == 0:
114119
panic(util.AssertErr())
115120
}
116121
switch flags {
@@ -123,9 +128,6 @@ func (s *vfsShm) shmLock(offset, n int32, flags _ShmFlag) _ErrorCode {
123128
default:
124129
panic(util.AssertErr())
125130
}
126-
if n != 1 && flags&_SHM_EXCLUSIVE == 0 {
127-
panic(util.AssertErr())
128-
}
129131

130132
var timeout time.Duration
131133
if s.blocking {

0 commit comments

Comments
 (0)