summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--go.mod2
-rw-r--r--go.sum4
-rw-r--r--vendor/codeberg.org/gruf/go-mutexes/cond.go87
-rw-r--r--vendor/codeberg.org/gruf/go-mutexes/map.go35
-rw-r--r--vendor/modules.txt2
5 files changed, 91 insertions, 39 deletions
diff --git a/go.mod b/go.mod
index 1ac0bb4a3..c4e3ab25a 100644
--- a/go.mod
+++ b/go.mod
@@ -14,7 +14,7 @@ require (
codeberg.org/gruf/go-iotools v0.0.0-20230811115124-5d4223615a7f
codeberg.org/gruf/go-kv v1.6.4
codeberg.org/gruf/go-logger/v2 v2.2.1
- codeberg.org/gruf/go-mutexes v1.3.1
+ codeberg.org/gruf/go-mutexes v1.4.0
codeberg.org/gruf/go-runners v1.6.2
codeberg.org/gruf/go-sched v1.2.3
codeberg.org/gruf/go-store/v2 v2.2.4
diff --git a/go.sum b/go.sum
index 2de163572..2f2bc4e73 100644
--- a/go.sum
+++ b/go.sum
@@ -62,8 +62,8 @@ codeberg.org/gruf/go-mangler v1.2.3 h1:sj0dey2lF5GRQL7fXmCY0wPNaI5JrROiThb0VDbzF
codeberg.org/gruf/go-mangler v1.2.3/go.mod h1:X/7URkFhLBAVKkTxmqF11Oxw3A6pSSxgPeHssQaiq28=
codeberg.org/gruf/go-maps v1.0.3 h1:VDwhnnaVNUIy5O93CvkcE2IZXnMB1+IJjzfop9V12es=
codeberg.org/gruf/go-maps v1.0.3/go.mod h1:D5LNDxlC9rsDuVQVM6JObaVGAdHB6g2dTdOdkh1aXWA=
-codeberg.org/gruf/go-mutexes v1.3.1 h1:8ibAjWwx08GJSq5R+lM9nwtJw2aAhMPKSXbfJ9EpDsA=
-codeberg.org/gruf/go-mutexes v1.3.1/go.mod h1:1j/6/MBeBQUedAtAtysLLnBKogfOZAxdym0E3wlaBD8=
+codeberg.org/gruf/go-mutexes v1.4.0 h1:53H6bFDRcG6rjk3iOTuGaStT/VTFdU5Uw8Dszy88a8g=
+codeberg.org/gruf/go-mutexes v1.4.0/go.mod h1:1j/6/MBeBQUedAtAtysLLnBKogfOZAxdym0E3wlaBD8=
codeberg.org/gruf/go-runners v1.6.2 h1:oQef9niahfHu/wch14xNxlRMP8i+ABXH1Cb9PzZ4oYo=
codeberg.org/gruf/go-runners v1.6.2/go.mod h1:Tq5PrZ/m/rBXbLZz0u5if+yP3nG5Sf6S8O/GnyEePeQ=
codeberg.org/gruf/go-sched v1.2.3 h1:H5ViDxxzOBR3uIyGBCf0eH8b1L8wMybOXcdtUUTXZHk=
diff --git a/vendor/codeberg.org/gruf/go-mutexes/cond.go b/vendor/codeberg.org/gruf/go-mutexes/cond.go
new file mode 100644
index 000000000..d89040c02
--- /dev/null
+++ b/vendor/codeberg.org/gruf/go-mutexes/cond.go
@@ -0,0 +1,87 @@
+package mutexes
+
+import (
+ "sync"
+ "unsafe"
+)
+
+// Cond is similar to a sync.Cond{}, but
+// it encompasses the Mutex{} within itself.
+type Cond struct {
+ notify notifyList
+ sync.Mutex
+}
+
+// See: sync.Cond{}.Wait().
+func (c *Cond) Wait() {
+ t := runtime_notifyListAdd(&c.notify)
+ c.Mutex.Unlock()
+ runtime_notifyListWait(&c.notify, t)
+ c.Mutex.Lock()
+}
+
+// See: sync.Cond{}.Signal().
+func (c *Cond) Signal() { runtime_notifyListNotifyOne(&c.notify) }
+
+// See: sync.Cond{}.Broadcast().
+func (c *Cond) Broadcast() { runtime_notifyListNotifyAll(&c.notify) }
+
+// RWCond is similar to a sync.Cond{}, but
+// it encompasses the RWMutex{} within itself.
+type RWCond struct {
+ notify notifyList
+ sync.RWMutex
+}
+
+// See: sync.Cond{}.Wait().
+func (c *RWCond) Wait() {
+ t := runtime_notifyListAdd(&c.notify)
+ c.RWMutex.Unlock()
+ runtime_notifyListWait(&c.notify, t)
+ c.RWMutex.Lock()
+}
+
+// See: sync.Cond{}.Signal().
+func (c *RWCond) Signal() { runtime_notifyListNotifyOne(&c.notify) }
+
+// See: sync.Cond{}.Broadcast().
+func (c *RWCond) Broadcast() { runtime_notifyListNotifyAll(&c.notify) }
+
+// unused fields left
+// un-named for safety.
+type notifyList struct {
+ _ uint32 // wait uint32
+ notify uint32 // notify uint32
+ _ uintptr // lock mutex
+ _ unsafe.Pointer // head *sudog
+ _ unsafe.Pointer // tail *sudog
+}
+
+// See runtime/sema.go for documentation.
+//
+//go:linkname runtime_notifyListAdd sync.runtime_notifyListAdd
+func runtime_notifyListAdd(l *notifyList) uint32
+
+// See runtime/sema.go for documentation.
+//
+//go:linkname runtime_notifyListWait sync.runtime_notifyListWait
+func runtime_notifyListWait(l *notifyList, t uint32)
+
+// See runtime/sema.go for documentation.
+//
+//go:linkname runtime_notifyListNotifyOne sync.runtime_notifyListNotifyOne
+func runtime_notifyListNotifyOne(l *notifyList)
+
+// See runtime/sema.go for documentation.
+//
+//go:linkname runtime_notifyListNotifyAll sync.runtime_notifyListNotifyAll
+func runtime_notifyListNotifyAll(l *notifyList)
+
+// Ensure that sync and runtime agree on size of notifyList.
+//
+//go:linkname runtime_notifyListCheck sync.runtime_notifyListCheck
+func runtime_notifyListCheck(size uintptr)
+func init() {
+ var n notifyList
+ runtime_notifyListCheck(unsafe.Sizeof(n))
+}
diff --git a/vendor/codeberg.org/gruf/go-mutexes/map.go b/vendor/codeberg.org/gruf/go-mutexes/map.go
index 8a73a96d9..e61ef3537 100644
--- a/vendor/codeberg.org/gruf/go-mutexes/map.go
+++ b/vendor/codeberg.org/gruf/go-mutexes/map.go
@@ -3,7 +3,6 @@ package mutexes
import (
"sync"
"sync/atomic"
- "unsafe"
)
const (
@@ -250,37 +249,3 @@ func (mu *rwmutex) WaitRelock(outer *sync.Mutex) {
// Relock!
outer.Lock()
}
-
-// unused fields left
-// un-named for safety.
-type notifyList struct {
- _ uint32 // wait uint32
- notify uint32 // notify uint32
- _ uintptr // lock mutex
- _ unsafe.Pointer // head *sudog
- _ unsafe.Pointer // tail *sudog
-}
-
-// See runtime/sema.go for documentation.
-//
-//go:linkname runtime_notifyListAdd sync.runtime_notifyListAdd
-func runtime_notifyListAdd(l *notifyList) uint32
-
-// See runtime/sema.go for documentation.
-//
-//go:linkname runtime_notifyListWait sync.runtime_notifyListWait
-func runtime_notifyListWait(l *notifyList, t uint32)
-
-// See runtime/sema.go for documentation.
-//
-//go:linkname runtime_notifyListNotifyAll sync.runtime_notifyListNotifyAll
-func runtime_notifyListNotifyAll(l *notifyList)
-
-// Ensure that sync and runtime agree on size of notifyList.
-//
-//go:linkname runtime_notifyListCheck sync.runtime_notifyListCheck
-func runtime_notifyListCheck(size uintptr)
-func init() {
- var n notifyList
- runtime_notifyListCheck(unsafe.Sizeof(n))
-}
diff --git a/vendor/modules.txt b/vendor/modules.txt
index d7a945da1..e721bfff3 100644
--- a/vendor/modules.txt
+++ b/vendor/modules.txt
@@ -46,7 +46,7 @@ codeberg.org/gruf/go-mangler
# codeberg.org/gruf/go-maps v1.0.3
## explicit; go 1.19
codeberg.org/gruf/go-maps
-# codeberg.org/gruf/go-mutexes v1.3.1
+# codeberg.org/gruf/go-mutexes v1.4.0
## explicit; go 1.14
codeberg.org/gruf/go-mutexes
# codeberg.org/gruf/go-runners v1.6.2