summaryrefslogtreecommitdiff
path: root/vendor/codeberg.org
diff options
context:
space:
mode:
authorLibravatar dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>2025-04-07 11:04:45 +0100
committerLibravatar GitHub <noreply@github.com>2025-04-07 11:04:45 +0100
commit4232d617823bff8905672b86748adb2b2461fa9a (patch)
treef808576c83daba93d43c6fb19d7291a40e462b32 /vendor/codeberg.org
parent[chore]: Bump codeberg.org/gruf/go-structr from 0.9.0 to 0.9.6 (#3973) (diff)
downloadgotosocial-4232d617823bff8905672b86748adb2b2461fa9a.tar.xz
[chore]: Bump codeberg.org/gruf/go-mutexes from 1.5.1 to 1.5.2 (#3976)
Bumps codeberg.org/gruf/go-mutexes from 1.5.1 to 1.5.2. --- updated-dependencies: - dependency-name: codeberg.org/gruf/go-mutexes dependency-version: 1.5.2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Diffstat (limited to 'vendor/codeberg.org')
-rw-r--r--vendor/codeberg.org/gruf/go-mutexes/map.go28
-rw-r--r--vendor/codeberg.org/gruf/go-mutexes/map_unsafe.go41
2 files changed, 43 insertions, 26 deletions
diff --git a/vendor/codeberg.org/gruf/go-mutexes/map.go b/vendor/codeberg.org/gruf/go-mutexes/map.go
index 4b721cec4..2f21ae0bb 100644
--- a/vendor/codeberg.org/gruf/go-mutexes/map.go
+++ b/vendor/codeberg.org/gruf/go-mutexes/map.go
@@ -2,7 +2,6 @@ package mutexes
import (
"sync"
- "sync/atomic"
"unsafe"
"codeberg.org/gruf/go-mempool"
@@ -185,34 +184,11 @@ func (mu *rwmutex) Unlock() bool {
// Fully unlocked.
mu.t = 0
- // NOTE: must remain in
- // sync with runtime.notifyList{}.
- //
- // goexperiment.staticlockranking
- // does change it slightly, but
- // this does not alter the first
- // 2 fields which are all we need.
- type notifyList struct {
- _ uint32
- notify uint32
- // ... other fields
- }
-
- // NOTE: must remain in
- // sync with sync.Cond{}.
- type syncCond struct {
- _ struct{}
- L sync.Locker
- n notifyList
- // ... other fields
- }
-
// Awake all blocked goroutines and check
// for change in the last notified ticket.
- cptr := (*syncCond)(unsafe.Pointer(&mu.c))
- before := atomic.LoadUint32(&cptr.n.notify)
+ before := syncCond_last_ticket(&mu.c)
mu.c.Broadcast() // awakes all blocked!
- after := atomic.LoadUint32(&cptr.n.notify)
+ after := syncCond_last_ticket(&mu.c)
// If ticket changed, this indicates
// AT LEAST one goroutine was awoken.
diff --git a/vendor/codeberg.org/gruf/go-mutexes/map_unsafe.go b/vendor/codeberg.org/gruf/go-mutexes/map_unsafe.go
new file mode 100644
index 000000000..a59c13015
--- /dev/null
+++ b/vendor/codeberg.org/gruf/go-mutexes/map_unsafe.go
@@ -0,0 +1,41 @@
+//go:build go1.22 && !go1.25
+
+package mutexes
+
+import (
+ "sync"
+ "sync/atomic"
+ "unsafe"
+)
+
+// syncCond_last_ticket is an unsafe function that returns
+// the ticket of the last awoken / notified goroutine by a
+// a sync.Cond{}. it relies on expected memory layout.
+func syncCond_last_ticket(c *sync.Cond) uint32 {
+
+ // NOTE: must remain in
+ // sync with runtime.notifyList{}.
+ //
+ // goexperiment.staticlockranking
+ // does change it slightly, but
+ // this does not alter the first
+ // 2 fields which are all we need.
+ type notifyList struct {
+ _ atomic.Uint32
+ notify uint32
+ // ... other fields
+ }
+
+ // NOTE: must remain in
+ // sync with sync.Cond{}.
+ type syncCond struct {
+ _ struct{}
+ L sync.Locker
+ n notifyList
+ // ... other fields
+ }
+
+ // This field must be atomcially accessed.
+ cptr := (*syncCond)(unsafe.Pointer(c))
+ return atomic.LoadUint32(&cptr.n.notify)
+}