[chore] update dependencies (#4601)
- codeberg.org/gruf/go-mempool: v0.0.0-20251108154517-8ed128fbca8e -> v0.0.0-20251203105841-4b67fa2f3984 - codeberg.org/gruf/go-structr: v0.9.13 -> v0.9.14 - github.com/ncruces/go-sqlite3: v0.30.2 -> v0.30.3 Reviewed-on: https://codeberg.org/superseriousbusiness/gotosocial/pulls/4601 Co-authored-by: kim <grufwub@gmail.com> Co-committed-by: kim <grufwub@gmail.com>
This commit is contained in:
@@ -22,14 +22,14 @@ require (
|
||||
codeberg.org/gruf/go-iotools v0.0.0-20240710125620-934ae9c654cf
|
||||
codeberg.org/gruf/go-kv/v2 v2.0.7
|
||||
codeberg.org/gruf/go-list v0.0.0-20240425093752-494db03d641f
|
||||
codeberg.org/gruf/go-mempool v0.0.0-20251108154517-8ed128fbca8e
|
||||
codeberg.org/gruf/go-mempool v0.0.0-20251203105841-4b67fa2f3984
|
||||
codeberg.org/gruf/go-mmap v0.0.0-20251111184116-345a42dab154
|
||||
codeberg.org/gruf/go-mutexes v1.5.8
|
||||
codeberg.org/gruf/go-runners v1.7.0
|
||||
codeberg.org/gruf/go-sched v1.3.0
|
||||
codeberg.org/gruf/go-split v1.2.0
|
||||
codeberg.org/gruf/go-storage v0.5.0
|
||||
codeberg.org/gruf/go-structr v0.9.13
|
||||
codeberg.org/gruf/go-structr v0.9.14
|
||||
github.com/DmitriyVTitov/size v1.5.0
|
||||
github.com/KimMachineGun/automemlimit v0.7.5
|
||||
github.com/SherClockHolmes/webpush-go v1.4.0
|
||||
@@ -51,7 +51,7 @@ require (
|
||||
github.com/miekg/dns v1.1.68
|
||||
github.com/minio/minio-go/v7 v7.0.97
|
||||
github.com/mitchellh/mapstructure v1.5.0
|
||||
github.com/ncruces/go-sqlite3 v0.30.2
|
||||
github.com/ncruces/go-sqlite3 v0.30.3
|
||||
github.com/oklog/ulid v1.3.1
|
||||
github.com/pquerna/otp v1.5.0
|
||||
github.com/rivo/uniseg v0.4.7
|
||||
|
||||
@@ -42,8 +42,8 @@ codeberg.org/gruf/go-mangler/v2 v2.0.6 h1:c3cwnI6Mi17EAwGSYGNMN6+9PMzaIj2GLAKx9D
|
||||
codeberg.org/gruf/go-mangler/v2 v2.0.6/go.mod h1:CXIm7zAWPdNmZVAGM1NRiF/ekJTPE7YTb8kiRxiEFaQ=
|
||||
codeberg.org/gruf/go-maps v1.0.4 h1:K+Ww4vvR3TZqm5jqrKVirmguZwa3v1VUvmig2SE8uxY=
|
||||
codeberg.org/gruf/go-maps v1.0.4/go.mod h1:ASX7osM7kFwt5O8GfGflcFjrwYGD8eIuRLl/oMjhEi8=
|
||||
codeberg.org/gruf/go-mempool v0.0.0-20251108154517-8ed128fbca8e h1:FeUR1iVQotYO7Lq3T8LZ4bTwammXWgrNOdq+hMezETs=
|
||||
codeberg.org/gruf/go-mempool v0.0.0-20251108154517-8ed128fbca8e/go.mod h1:761koiXmqfgzvu5mez2Rk7YlwWilpqJ/zv5hIA6NoNI=
|
||||
codeberg.org/gruf/go-mempool v0.0.0-20251203105841-4b67fa2f3984 h1:pKfbh2e4iVMo53ixWfL5Ep3M4G7zTSVCTlRuq8lY4v8=
|
||||
codeberg.org/gruf/go-mempool v0.0.0-20251203105841-4b67fa2f3984/go.mod h1:761koiXmqfgzvu5mez2Rk7YlwWilpqJ/zv5hIA6NoNI=
|
||||
codeberg.org/gruf/go-mmap v0.0.0-20251111184116-345a42dab154 h1:2SSyx/7XgOOC9nKdlrgpxenz7oZlvUeLR+YEfjM6iS8=
|
||||
codeberg.org/gruf/go-mmap v0.0.0-20251111184116-345a42dab154/go.mod h1:kaHx5xHuLNf13iALbHiFpXmLeO33Ll/aW3mGkW8sI40=
|
||||
codeberg.org/gruf/go-mutexes v1.5.8 h1:HRGnvT4COb3jX9xdeoSUUbjPgmk5kXPuDfld9ksUJKA=
|
||||
@@ -56,8 +56,8 @@ codeberg.org/gruf/go-split v1.2.0 h1:PmzL23nVEVHm8VxjsJmv4m4wGQz2bGgQw52dgSSj65c
|
||||
codeberg.org/gruf/go-split v1.2.0/go.mod h1:0rejWJpqvOoFAd7nwm5tIXYKaAqjtFGOXmTqQV+VO38=
|
||||
codeberg.org/gruf/go-storage v0.5.0 h1:c4rT1yOEVvBuPclWhppxmLYy+SN1qdgwFdZG7Icyn3s=
|
||||
codeberg.org/gruf/go-storage v0.5.0/go.mod h1:Zk/kpUMCikXQNJBHSjxygKwv7N/t8mJvg17sMjl29Xw=
|
||||
codeberg.org/gruf/go-structr v0.9.13 h1:tTAR30OnSKrcvBomlGZdwE2nE+cfWhkX8UhX0GTAbMo=
|
||||
codeberg.org/gruf/go-structr v0.9.13/go.mod h1:sP2ZSjM5X5XKlxuhAbTKuVQm9DWbHsrQRuTl3MUwbHw=
|
||||
codeberg.org/gruf/go-structr v0.9.14 h1:mUxxyg2isIkJI+fOZM8CLMq/JwaDteYyP3GmTem62tk=
|
||||
codeberg.org/gruf/go-structr v0.9.14/go.mod h1:xd0c09WwcwXwzBGMnsyVsbgtOvbvcckPWyguS8XhVtE=
|
||||
codeberg.org/gruf/go-xunsafe v0.0.0-20250809104800-512a9df57d73 h1:pRaOwIOS1WSZoPCAvE0H1zpv+D4gF37OVppybffqdI8=
|
||||
codeberg.org/gruf/go-xunsafe v0.0.0-20250809104800-512a9df57d73/go.mod h1:9wkq+dmHjUhB/0ZxDUWAwsWuXwwGyx5N1dDCB9hpWs8=
|
||||
dario.cat/mergo v1.0.2 h1:85+piFYR1tMbRrLcDwR18y4UKJ3aH1Tbzi24VRW1TK8=
|
||||
@@ -333,8 +333,8 @@ github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9G
|
||||
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
|
||||
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
|
||||
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
|
||||
github.com/ncruces/go-sqlite3 v0.30.2 h1:1GVbHAkKAOwjJd3JYl8ldrYROudfZUOah7oXPD7VZbQ=
|
||||
github.com/ncruces/go-sqlite3 v0.30.2/go.mod h1:AxKu9sRxkludimFocbktlY6LiYSkxiI5gTA8r+os/Nw=
|
||||
github.com/ncruces/go-sqlite3 v0.30.3 h1:X/CgWW9GzmIAkEPrifhKqf0cC15DuOVxAJaHFTTAURQ=
|
||||
github.com/ncruces/go-sqlite3 v0.30.3/go.mod h1:AxKu9sRxkludimFocbktlY6LiYSkxiI5gTA8r+os/Nw=
|
||||
github.com/ncruces/go-strftime v0.1.9 h1:bY0MQC28UADQmHmaF5dgpLmImcShSi2kHU9XLdhx/f4=
|
||||
github.com/ncruces/go-strftime v0.1.9/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls=
|
||||
github.com/ncruces/julianday v1.0.0 h1:fH0OKwa7NWvniGQtxdJRxAgkBMolni2BjDHaWTxqt7M=
|
||||
|
||||
+114
-25
@@ -1,6 +1,7 @@
|
||||
package mempool
|
||||
|
||||
import (
|
||||
"runtime"
|
||||
"sync"
|
||||
"sync/atomic"
|
||||
"unsafe"
|
||||
@@ -70,18 +71,15 @@ const (
|
||||
)
|
||||
|
||||
type internal struct {
|
||||
// fast-access ring-buffer of
|
||||
// pointers accessible by index.
|
||||
//
|
||||
// if Go ever exposes goroutine IDs
|
||||
// to us we can make this a lot faster.
|
||||
ring [20]unsafe.Pointer
|
||||
index atomic.Uint32
|
||||
|
||||
// underlying pool and
|
||||
// slow mutex protection.
|
||||
pool UnsafeSimplePool
|
||||
mutex sync.Mutex
|
||||
|
||||
// fast-access ring-buffer of
|
||||
// pointers accessible by PID
|
||||
// (running goroutine index).
|
||||
ring atomic_pointer
|
||||
}
|
||||
|
||||
func (p *internal) Check(fn func(current, victim int) bool) func(current, victim int) bool {
|
||||
@@ -100,40 +98,131 @@ func (p *internal) Check(fn func(current, victim int) bool) func(current, victim
|
||||
}
|
||||
|
||||
func (p *internal) Get() unsafe.Pointer {
|
||||
const cap = uint32(cap(p.ring))
|
||||
idx := p.index.Load() % cap
|
||||
if ptr := atomic.SwapPointer(&p.ring[idx], nil); ptr != nil {
|
||||
p.index.Add(^uint32(0)) // i.e. -1
|
||||
pid := procPin()
|
||||
ptr := p.local(pid).Swap(nil)
|
||||
procUnpin()
|
||||
|
||||
if ptr != nil {
|
||||
return ptr
|
||||
}
|
||||
|
||||
p.mutex.Lock()
|
||||
ptr := p.pool.Get()
|
||||
ptr = p.pool.Get()
|
||||
p.mutex.Unlock()
|
||||
return ptr
|
||||
}
|
||||
|
||||
func (p *internal) Put(ptr unsafe.Pointer) {
|
||||
const cap = uint32(cap(p.ring))
|
||||
idx := p.index.Add(1) % cap
|
||||
if ptr := atomic.SwapPointer(&p.ring[idx], ptr); ptr != nil {
|
||||
p.mutex.Lock()
|
||||
p.pool.Put(ptr)
|
||||
p.mutex.Unlock()
|
||||
pid := procPin()
|
||||
ptr = p.local(pid).Swap(ptr)
|
||||
procUnpin()
|
||||
|
||||
if ptr == nil {
|
||||
return
|
||||
}
|
||||
|
||||
p.mutex.Lock()
|
||||
p.pool.Put(ptr)
|
||||
p.mutex.Unlock()
|
||||
}
|
||||
|
||||
func (p *internal) GC() {
|
||||
for i := range p.ring {
|
||||
atomic.StorePointer(&p.ring[i], nil)
|
||||
}
|
||||
p.ring.Store(nil)
|
||||
p.mutex.Lock()
|
||||
p.pool.GC()
|
||||
p.mutex.Unlock()
|
||||
}
|
||||
|
||||
func (p *internal) Size() int {
|
||||
func (p *internal) Size() (sz int) {
|
||||
if ptr := p.ring.Load(); ptr != nil {
|
||||
sz += len(*(*[]pointer_elem)(ptr))
|
||||
}
|
||||
p.mutex.Lock()
|
||||
sz := p.pool.Size()
|
||||
sz += p.pool.Size()
|
||||
p.mutex.Unlock()
|
||||
return sz
|
||||
return
|
||||
}
|
||||
|
||||
// local returns an atomic_pointer from the fast-access
|
||||
// ring buffer for the given goroutine PID index.
|
||||
func (p *internal) local(pid uint) *pointer_elem {
|
||||
for {
|
||||
// Load current ring.
|
||||
ptr := p.ring.Load()
|
||||
if ptr != nil {
|
||||
|
||||
// Check if pid within ring length.
|
||||
ring := *(*[]pointer_elem)(ptr)
|
||||
if pid < uint(len(ring)) {
|
||||
return &ring[pid]
|
||||
}
|
||||
}
|
||||
|
||||
// Unpin before calling GOMAXPROCS,
|
||||
// which acquires a blocking mutex
|
||||
// lock on scheduler and may cause
|
||||
// goroutine to be rescheduled.
|
||||
procUnpin()
|
||||
|
||||
// Allocate new ring buffer capable
|
||||
// of accomodating an index of 'pid'.
|
||||
ring := make([]pointer_elem, maxprocs())
|
||||
|
||||
// Repin and get a (potentially)
|
||||
// different goroutine PID index.
|
||||
pid = procPin()
|
||||
|
||||
// Attempt to replace
|
||||
// ring ptr with new.
|
||||
if pid < uint(len(ring)) &&
|
||||
p.ring.CAS(ptr, unsafe.Pointer(&ring)) {
|
||||
return &ring[pid]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// atomic_pointer wraps an unsafe.Pointer with
|
||||
// receiver methods for their atomic counterparts.
|
||||
type atomic_pointer struct{ p unsafe.Pointer }
|
||||
|
||||
func (p *atomic_pointer) Load() unsafe.Pointer {
|
||||
return atomic.LoadPointer(&p.p)
|
||||
}
|
||||
|
||||
func (p *atomic_pointer) Store(ptr unsafe.Pointer) {
|
||||
atomic.StorePointer(&p.p, ptr)
|
||||
}
|
||||
|
||||
func (p *atomic_pointer) CAS(old, new unsafe.Pointer) bool {
|
||||
return atomic.CompareAndSwapPointer(&p.p, old, new)
|
||||
}
|
||||
|
||||
// pointer_elem wraps an unsafe.Pointer to make
|
||||
// swapping of a slice element nicer on the eyes.
|
||||
//
|
||||
// THIS IS THE TRUE VIBE CODING, NONE OF THAT LLM
|
||||
// DOG-ARSE BULLSHIT. WRITE CODE WITH *NICE VIBES*.
|
||||
type pointer_elem struct{ p unsafe.Pointer }
|
||||
|
||||
func (p *pointer_elem) Swap(new unsafe.Pointer) unsafe.Pointer {
|
||||
old := p.p
|
||||
p.p = new
|
||||
return old
|
||||
}
|
||||
|
||||
// maxprocs prevents runtime.GOMAXPROCS() from
|
||||
// being inlined, making it more likely for its
|
||||
// caller to be capable of being inlined.
|
||||
//
|
||||
//go:noinline
|
||||
func maxprocs() int {
|
||||
return runtime.GOMAXPROCS(0)
|
||||
}
|
||||
|
||||
// note is int in runtime, but should never be negative.
|
||||
//
|
||||
//go:linkname procPin runtime.procPin
|
||||
func procPin() uint
|
||||
|
||||
//go:linkname procUnpin runtime.procUnpin
|
||||
func procUnpin()
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
# Embeddable Wasm build of SQLite
|
||||
|
||||
This folder includes an embeddable Wasm build of SQLite 3.50.4 for use with
|
||||
This folder includes an embeddable Wasm build of SQLite 3.51.1 for use with
|
||||
[`github.com/ncruces/go-sqlite3`](https://pkg.go.dev/github.com/ncruces/go-sqlite3).
|
||||
|
||||
The following optional features are compiled in:
|
||||
|
||||
+1
@@ -23,6 +23,7 @@ trap 'rm -f sqlite3.tmp' EXIT
|
||||
-Wl,--import-undefined \
|
||||
-Wl,--initial-memory=327680 \
|
||||
-D_HAVE_SQLITE_CONFIG_H \
|
||||
-DSQLITE_EXPERIMENTAL_PRAGMA_20251114 \
|
||||
-DSQLITE_CUSTOM_INCLUDE=sqlite_opt.h \
|
||||
$(awk '{print "-Wl,--export="$0}' exports.txt)
|
||||
|
||||
|
||||
BIN
Binary file not shown.
+1
-1
@@ -223,7 +223,7 @@ func (m *memFile) Lock(lock vfs.LockLevel) error {
|
||||
m.reserved = true
|
||||
|
||||
case vfs.LOCK_EXCLUSIVE:
|
||||
if m.lock < vfs.LOCK_PENDING {
|
||||
if m.lock == vfs.LOCK_RESERVED {
|
||||
m.lock = vfs.LOCK_PENDING
|
||||
m.pending = true
|
||||
}
|
||||
|
||||
Vendored
+3
-3
@@ -271,7 +271,7 @@ codeberg.org/gruf/go-mangler/v2
|
||||
# codeberg.org/gruf/go-maps v1.0.4
|
||||
## explicit; go 1.20
|
||||
codeberg.org/gruf/go-maps
|
||||
# codeberg.org/gruf/go-mempool v0.0.0-20251108154517-8ed128fbca8e
|
||||
# codeberg.org/gruf/go-mempool v0.0.0-20251203105841-4b67fa2f3984
|
||||
## explicit; go 1.24.0
|
||||
codeberg.org/gruf/go-mempool
|
||||
# codeberg.org/gruf/go-mmap v0.0.0-20251111184116-345a42dab154
|
||||
@@ -297,7 +297,7 @@ codeberg.org/gruf/go-storage/internal
|
||||
codeberg.org/gruf/go-storage/memory
|
||||
codeberg.org/gruf/go-storage/s3
|
||||
codeberg.org/gruf/go-storage/s3/cache
|
||||
# codeberg.org/gruf/go-structr v0.9.13
|
||||
# codeberg.org/gruf/go-structr v0.9.14
|
||||
## explicit; go 1.24.5
|
||||
codeberg.org/gruf/go-structr
|
||||
# codeberg.org/gruf/go-xunsafe v0.0.0-20250809104800-512a9df57d73
|
||||
@@ -739,7 +739,7 @@ github.com/modern-go/reflect2
|
||||
# github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822
|
||||
## explicit
|
||||
github.com/munnerz/goautoneg
|
||||
# github.com/ncruces/go-sqlite3 v0.30.2
|
||||
# github.com/ncruces/go-sqlite3 v0.30.3
|
||||
## explicit; go 1.24.0
|
||||
github.com/ncruces/go-sqlite3
|
||||
github.com/ncruces/go-sqlite3/driver
|
||||
|
||||
Reference in New Issue
Block a user