summaryrefslogtreecommitdiff
path: root/vendor/github.com/ncruces/go-sqlite3
diff options
context:
space:
mode:
authorLibravatar Daenney <daenney@users.noreply.github.com>2024-12-20 22:37:19 +0100
committerLibravatar GitHub <noreply@github.com>2024-12-20 21:37:19 +0000
commit9ae0c7b3636365406b480b494dccc609ccba08b9 (patch)
treeb6a205df8ff83acaff1745ff88885d9346ffef04 /vendor/github.com/ncruces/go-sqlite3
parent[bugfix] Load instance-wide custom css in page stylesheets template (#3601) (diff)
downloadgotosocial-9ae0c7b3636365406b480b494dccc609ccba08b9.tar.xz
[chore] Update ncruces/go-sqlite3 to 0.21.3 (#3629)
This includes some additional locking fixes for the BSDs.
Diffstat (limited to 'vendor/github.com/ncruces/go-sqlite3')
-rw-r--r--vendor/github.com/ncruces/go-sqlite3/driver/driver.go1
-rw-r--r--vendor/github.com/ncruces/go-sqlite3/driver/util.go60
-rw-r--r--vendor/github.com/ncruces/go-sqlite3/driver/whitespace.go61
-rw-r--r--vendor/github.com/ncruces/go-sqlite3/internal/util/mmap_unix.go10
-rw-r--r--vendor/github.com/ncruces/go-sqlite3/sqlite.go5
-rw-r--r--vendor/github.com/ncruces/go-sqlite3/vfs/lock.go19
-rw-r--r--vendor/github.com/ncruces/go-sqlite3/vfs/shm_bsd.go20
-rw-r--r--vendor/github.com/ncruces/go-sqlite3/vfs/shm_dotlk.go2
-rw-r--r--vendor/github.com/ncruces/go-sqlite3/vfs/shm_memlk.go16
-rw-r--r--vendor/github.com/ncruces/go-sqlite3/vfs/shm_ofd.go10
10 files changed, 107 insertions, 97 deletions
diff --git a/vendor/github.com/ncruces/go-sqlite3/driver/driver.go b/vendor/github.com/ncruces/go-sqlite3/driver/driver.go
index b9bb03bb7..742f308af 100644
--- a/vendor/github.com/ncruces/go-sqlite3/driver/driver.go
+++ b/vendor/github.com/ncruces/go-sqlite3/driver/driver.go
@@ -274,6 +274,7 @@ func (n *connector) Connect(ctx context.Context) (res driver.Conn, err error) {
// if err != nil {
// log.Fatal(err)
// }
+// defer conn.Close()
//
// err = conn.Raw(func(driverConn any) error {
// conn := driverConn.(driver.Conn)
diff --git a/vendor/github.com/ncruces/go-sqlite3/driver/util.go b/vendor/github.com/ncruces/go-sqlite3/driver/util.go
index 033841157..987585576 100644
--- a/vendor/github.com/ncruces/go-sqlite3/driver/util.go
+++ b/vendor/github.com/ncruces/go-sqlite3/driver/util.go
@@ -12,3 +12,63 @@ func namedValues(args []driver.Value) []driver.NamedValue {
}
return named
}
+
+func notWhitespace(sql string) bool {
+ const (
+ code = iota
+ slash
+ minus
+ ccomment
+ sqlcomment
+ endcomment
+ )
+
+ state := code
+ for _, b := range ([]byte)(sql) {
+ if b == 0 {
+ break
+ }
+
+ switch state {
+ case code:
+ switch b {
+ case '/':
+ state = slash
+ case '-':
+ state = minus
+ case ' ', ';', '\t', '\n', '\v', '\f', '\r':
+ continue
+ default:
+ return true
+ }
+ case slash:
+ if b != '*' {
+ return true
+ }
+ state = ccomment
+ case minus:
+ if b != '-' {
+ return true
+ }
+ state = sqlcomment
+ case ccomment:
+ if b == '*' {
+ state = endcomment
+ }
+ case sqlcomment:
+ if b == '\n' {
+ state = code
+ }
+ case endcomment:
+ switch b {
+ case '/':
+ state = code
+ case '*':
+ state = endcomment
+ default:
+ state = ccomment
+ }
+ }
+ }
+ return state == slash || state == minus
+}
diff --git a/vendor/github.com/ncruces/go-sqlite3/driver/whitespace.go b/vendor/github.com/ncruces/go-sqlite3/driver/whitespace.go
deleted file mode 100644
index 8f45706f5..000000000
--- a/vendor/github.com/ncruces/go-sqlite3/driver/whitespace.go
+++ /dev/null
@@ -1,61 +0,0 @@
-package driver
-
-func notWhitespace(sql string) bool {
- const (
- code = iota
- slash
- minus
- ccomment
- sqlcomment
- endcomment
- )
-
- state := code
- for _, b := range ([]byte)(sql) {
- if b == 0 {
- break
- }
-
- switch state {
- case code:
- switch b {
- case '/':
- state = slash
- case '-':
- state = minus
- case ' ', ';', '\t', '\n', '\v', '\f', '\r':
- continue
- default:
- return true
- }
- case slash:
- if b != '*' {
- return true
- }
- state = ccomment
- case minus:
- if b != '-' {
- return true
- }
- state = sqlcomment
- case ccomment:
- if b == '*' {
- state = endcomment
- }
- case sqlcomment:
- if b == '\n' {
- state = code
- }
- case endcomment:
- switch b {
- case '/':
- state = code
- case '*':
- state = endcomment
- default:
- state = ccomment
- }
- }
- }
- return state == slash || state == minus
-}
diff --git a/vendor/github.com/ncruces/go-sqlite3/internal/util/mmap_unix.go b/vendor/github.com/ncruces/go-sqlite3/internal/util/mmap_unix.go
index 5d5ca3823..4ff056666 100644
--- a/vendor/github.com/ncruces/go-sqlite3/internal/util/mmap_unix.go
+++ b/vendor/github.com/ncruces/go-sqlite3/internal/util/mmap_unix.go
@@ -39,13 +39,13 @@ func (s *mmapState) new(ctx context.Context, mod api.Module, size int32) *Mapped
// Save the newly allocated region.
ptr := uint32(stack[0])
buf := View(mod, ptr, uint64(size))
- addr := unsafe.Pointer(&buf[0])
- s.regions = append(s.regions, &MappedRegion{
+ res := &MappedRegion{
Ptr: ptr,
- addr: addr,
size: size,
- })
- return s.regions[len(s.regions)-1]
+ addr: unsafe.Pointer(&buf[0]),
+ }
+ s.regions = append(s.regions, res)
+ return res
}
type MappedRegion struct {
diff --git a/vendor/github.com/ncruces/go-sqlite3/sqlite.go b/vendor/github.com/ncruces/go-sqlite3/sqlite.go
index 2afe9971c..18a2c2a73 100644
--- a/vendor/github.com/ncruces/go-sqlite3/sqlite.go
+++ b/vendor/github.com/ncruces/go-sqlite3/sqlite.go
@@ -265,10 +265,11 @@ func (a *arena) mark() (reset func()) {
ptrs := len(a.ptrs)
next := a.next
return func() {
- for _, ptr := range a.ptrs[ptrs:] {
+ rest := a.ptrs[ptrs:]
+ for _, ptr := range a.ptrs[:ptrs] {
a.sqlt.free(ptr)
}
- a.ptrs = a.ptrs[:ptrs]
+ a.ptrs = rest
a.next = next
}
}
diff --git a/vendor/github.com/ncruces/go-sqlite3/vfs/lock.go b/vendor/github.com/ncruces/go-sqlite3/vfs/lock.go
index 8828662d4..b28d83230 100644
--- a/vendor/github.com/ncruces/go-sqlite3/vfs/lock.go
+++ b/vendor/github.com/ncruces/go-sqlite3/vfs/lock.go
@@ -20,12 +20,10 @@ const (
)
func (f *vfsFile) Lock(lock LockLevel) error {
- // Argument check. SQLite never explicitly requests a pending lock.
- if lock != LOCK_SHARED && lock != LOCK_RESERVED && lock != LOCK_EXCLUSIVE {
- panic(util.AssertErr())
- }
-
switch {
+ case lock != LOCK_SHARED && lock != LOCK_RESERVED && lock != LOCK_EXCLUSIVE:
+ // Argument check. SQLite never explicitly requests a pending lock.
+ panic(util.AssertErr())
case f.lock < LOCK_NONE || f.lock > LOCK_EXCLUSIVE:
// Connection state check.
panic(util.AssertErr())
@@ -87,13 +85,12 @@ func (f *vfsFile) Lock(lock LockLevel) error {
}
func (f *vfsFile) Unlock(lock LockLevel) error {
- // Argument check.
- if lock != LOCK_NONE && lock != LOCK_SHARED {
+ switch {
+ case lock != LOCK_NONE && lock != LOCK_SHARED:
+ // Argument check.
panic(util.AssertErr())
- }
-
- // Connection state check.
- if f.lock < LOCK_NONE || f.lock > LOCK_EXCLUSIVE {
+ case f.lock < LOCK_NONE || f.lock > LOCK_EXCLUSIVE:
+ // Connection state check.
panic(util.AssertErr())
}
diff --git a/vendor/github.com/ncruces/go-sqlite3/vfs/shm_bsd.go b/vendor/github.com/ncruces/go-sqlite3/vfs/shm_bsd.go
index 10d6dbf61..5f4f5d108 100644
--- a/vendor/github.com/ncruces/go-sqlite3/vfs/shm_bsd.go
+++ b/vendor/github.com/ncruces/go-sqlite3/vfs/shm_bsd.go
@@ -22,7 +22,7 @@ type vfsShmParent struct {
refs int // +checklocks:vfsShmListMtx
- lock [_SHM_NLOCK]int16 // +checklocks:Mutex
+ lock [_SHM_NLOCK]int8 // +checklocks:Mutex
sync.Mutex
}
@@ -184,10 +184,22 @@ func (s *vfsShm) shmLock(offset, n int32, flags _ShmFlag) _ErrorCode {
return rc
}
- // Obtain/release the appropriate file lock.
+ // Obtain/release the appropriate file locks.
switch {
case flags&_SHM_UNLOCK != 0:
- return osUnlock(s.File, _SHM_BASE+int64(offset), int64(n))
+ begin, end := offset, offset+n
+ for i := begin; i < end; i++ {
+ if s.vfsShmParent.lock[i] != 0 {
+ if i > begin {
+ rc |= osUnlock(s.File, _SHM_BASE+int64(begin), int64(i-begin))
+ }
+ begin = i + 1
+ }
+ }
+ if end > begin {
+ rc |= osUnlock(s.File, _SHM_BASE+int64(begin), int64(end-begin))
+ }
+ return rc
case flags&_SHM_SHARED != 0:
rc = osReadLock(s.File, _SHM_BASE+int64(offset), int64(n))
case flags&_SHM_EXCLUSIVE != 0:
@@ -196,7 +208,7 @@ func (s *vfsShm) shmLock(offset, n int32, flags _ShmFlag) _ErrorCode {
panic(util.AssertErr())
}
- // Release the local lock.
+ // Release the local lock we had acquired.
if rc != _OK {
s.shmMemLock(offset, n, flags^(_SHM_UNLOCK|_SHM_LOCK))
}
diff --git a/vendor/github.com/ncruces/go-sqlite3/vfs/shm_dotlk.go b/vendor/github.com/ncruces/go-sqlite3/vfs/shm_dotlk.go
index 17fefe562..842bea8f5 100644
--- a/vendor/github.com/ncruces/go-sqlite3/vfs/shm_dotlk.go
+++ b/vendor/github.com/ncruces/go-sqlite3/vfs/shm_dotlk.go
@@ -18,7 +18,7 @@ type vfsShmParent struct {
shared [][_WALINDEX_PGSZ]byte
refs int // +checklocks:vfsShmListMtx
- lock [_SHM_NLOCK]int16 // +checklocks:Mutex
+ lock [_SHM_NLOCK]int8 // +checklocks:Mutex
sync.Mutex
}
diff --git a/vendor/github.com/ncruces/go-sqlite3/vfs/shm_memlk.go b/vendor/github.com/ncruces/go-sqlite3/vfs/shm_memlk.go
index 404019642..5c8071ebe 100644
--- a/vendor/github.com/ncruces/go-sqlite3/vfs/shm_memlk.go
+++ b/vendor/github.com/ncruces/go-sqlite3/vfs/shm_memlk.go
@@ -10,9 +10,6 @@ func (s *vfsShm) shmMemLock(offset, n int32, flags _ShmFlag) _ErrorCode {
case flags&_SHM_UNLOCK != 0:
for i := offset; i < offset+n; i++ {
if s.lock[i] {
- if s.vfsShmParent.lock[i] == 0 {
- panic(util.AssertErr())
- }
if s.vfsShmParent.lock[i] <= 0 {
s.vfsShmParent.lock[i] = 0
} else {
@@ -23,20 +20,21 @@ func (s *vfsShm) shmMemLock(offset, n int32, flags _ShmFlag) _ErrorCode {
}
case flags&_SHM_SHARED != 0:
for i := offset; i < offset+n; i++ {
- if s.lock[i] {
- panic(util.AssertErr())
- }
- if s.vfsShmParent.lock[i]+1 <= 0 {
+ if !s.lock[i] &&
+ s.vfsShmParent.lock[i]+1 <= 0 {
return _BUSY
}
}
for i := offset; i < offset+n; i++ {
- s.vfsShmParent.lock[i]++
- s.lock[i] = true
+ if !s.lock[i] {
+ s.vfsShmParent.lock[i]++
+ s.lock[i] = true
+ }
}
case flags&_SHM_EXCLUSIVE != 0:
for i := offset; i < offset+n; i++ {
if s.lock[i] {
+ // SQLite never requests an exclusive lock that it already holds.
panic(util.AssertErr())
}
if s.vfsShmParent.lock[i] != 0 {
diff --git a/vendor/github.com/ncruces/go-sqlite3/vfs/shm_ofd.go b/vendor/github.com/ncruces/go-sqlite3/vfs/shm_ofd.go
index d335a85fc..dd3611193 100644
--- a/vendor/github.com/ncruces/go-sqlite3/vfs/shm_ofd.go
+++ b/vendor/github.com/ncruces/go-sqlite3/vfs/shm_ofd.go
@@ -110,7 +110,12 @@ func (s *vfsShm) shmMap(ctx context.Context, mod api.Module, id, size int32, ext
func (s *vfsShm) shmLock(offset, n int32, flags _ShmFlag) _ErrorCode {
// Argument check.
- if n <= 0 || offset < 0 || offset+n > _SHM_NLOCK {
+ switch {
+ case n <= 0:
+ panic(util.AssertErr())
+ case offset < 0 || offset+n > _SHM_NLOCK:
+ panic(util.AssertErr())
+ case n != 1 && flags&_SHM_EXCLUSIVE == 0:
panic(util.AssertErr())
}
switch flags {
@@ -123,9 +128,6 @@ func (s *vfsShm) shmLock(offset, n int32, flags _ShmFlag) _ErrorCode {
default:
panic(util.AssertErr())
}
- if n != 1 && flags&_SHM_EXCLUSIVE == 0 {
- panic(util.AssertErr())
- }
var timeout time.Duration
if s.blocking {