mirror of
https://github.com/superseriousbusiness/gotosocial.git
synced 2025-11-01 05:52:25 -05:00
add git.iim.gay/grufwub/go-store for storage backend, replacing blob.Storage
Signed-off-by: kim (grufwub) <grufwub@gmail.com>
This commit is contained in:
parent
ab32ce642b
commit
e43a46e982
89 changed files with 9372 additions and 240 deletions
39
vendor/git.iim.gay/grufwub/go-mutexes/mutex_safe.go
vendored
Normal file
39
vendor/git.iim.gay/grufwub/go-mutexes/mutex_safe.go
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) }
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue