mirror of
https://github.com/superseriousbusiness/gotosocial
synced 2025-06-05 21:59:39 +02:00
update dependencies (#296)
This commit is contained in:
39
vendor/codeberg.org/gruf/go-mutexes/mutex_safe.go
generated
vendored
Normal file
39
vendor/codeberg.org/gruf/go-mutexes/mutex_safe.go
generated
vendored
Normal file
@@ -0,0 +1,39 @@
|
||||
package mutexes
|
||||
|
||||
import "sync"
|
||||
|
||||
// WithSafety wrapps the supplied Mutex to protect unlock fns
|
||||
// from being called multiple times
|
||||
func WithSafety(mu Mutex) Mutex {
|
||||
return &safeMutex{mu: mu}
|
||||
}
|
||||
|
||||
// WithSafetyRW wrapps the supplied RWMutex to protect unlock
|
||||
// fns from being called multiple times
|
||||
func WithSafetyRW(mu RWMutex) RWMutex {
|
||||
return &safeRWMutex{mu: mu}
|
||||
}
|
||||
|
||||
// safeMutex simply wraps a Mutex to add multi-unlock safety
|
||||
type safeMutex struct{ mu Mutex }
|
||||
|
||||
func (mu *safeMutex) Lock() func() {
|
||||
unlock := mu.mu.Lock()
|
||||
once := sync.Once{}
|
||||
return func() { once.Do(unlock) }
|
||||
}
|
||||
|
||||
// safeRWMutex simply wraps a RWMutex to add multi-unlock safety
|
||||
type safeRWMutex struct{ mu RWMutex }
|
||||
|
||||
func (mu *safeRWMutex) Lock() func() {
|
||||
unlock := mu.mu.Lock()
|
||||
once := sync.Once{}
|
||||
return func() { once.Do(unlock) }
|
||||
}
|
||||
|
||||
func (mu *safeRWMutex) RLock() func() {
|
||||
unlock := mu.mu.RLock()
|
||||
once := sync.Once{}
|
||||
return func() { once.Do(unlock) }
|
||||
}
|
Reference in New Issue
Block a user