Skip to content

Commit 78473b4

Browse files
committed
Fix BSD locks.
1 parent 3806c1c commit 78473b4

File tree

2 files changed

+19
-2
lines changed

2 files changed

+19
-2
lines changed

tests/parallel/parallel_test.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,12 +45,19 @@ func Test_wal(t *testing.T) {
4545
t.Skip("skipping without shared memory")
4646
}
4747

48+
var iter int
49+
if testing.Short() {
50+
iter = 1000
51+
} else {
52+
iter = 2500
53+
}
54+
4855
name := "file:" +
4956
filepath.ToSlash(filepath.Join(t.TempDir(), "test.db")) +
5057
"?_pragma=busy_timeout(10000)" +
5158
"&_pragma=journal_mode(wal)" +
5259
"&_pragma=synchronous(off)"
53-
testParallel(t, name, 1000)
60+
testParallel(t, name, iter)
5461
testIntegrity(t, name)
5562
}
5663

vfs/shm_bsd.go

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,8 +121,8 @@ func (s *vfsShm) shmOpen() (rc _ErrorCode) {
121121
// Find a shared file, increase the reference count.
122122
for _, g := range vfsShmFiles {
123123
if g != nil && os.SameFile(fi, g.info) {
124-
g.refs++
125124
s.vfsShmFile = g
125+
g.refs++
126126
return _OK
127127
}
128128
}
@@ -207,15 +207,22 @@ func (s *vfsShm) shmLock(offset, n int32, flags _ShmFlag) _ErrorCode {
207207
case flags&_SHM_UNLOCK != 0:
208208
for i := offset; i < offset+n; i++ {
209209
if s.lock[i] {
210+
if s.vfsShmFile.lock[i] == 0 {
211+
panic(util.AssertErr())
212+
}
210213
if s.vfsShmFile.lock[i] <= 0 {
211214
s.vfsShmFile.lock[i] = 0
212215
} else {
213216
s.vfsShmFile.lock[i]--
214217
}
218+
s.lock[i] = false
215219
}
216220
}
217221
case flags&_SHM_SHARED != 0:
218222
for i := offset; i < offset+n; i++ {
223+
if s.lock[i] {
224+
panic(util.AssertErr())
225+
}
219226
if s.vfsShmFile.lock[i] < 0 {
220227
return _BUSY
221228
}
@@ -226,6 +233,9 @@ func (s *vfsShm) shmLock(offset, n int32, flags _ShmFlag) _ErrorCode {
226233
}
227234
case flags&_SHM_EXCLUSIVE != 0:
228235
for i := offset; i < offset+n; i++ {
236+
if s.lock[i] {
237+
panic(util.AssertErr())
238+
}
229239
if s.vfsShmFile.lock[i] != 0 {
230240
return _BUSY
231241
}

0 commit comments

Comments
 (0)