mirror of
https://github.com/superseriousbusiness/gotosocial.git
synced 2025-12-17 12:23:00 -06: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
45
vendor/git.iim.gay/grufwub/go-errors/once.go
vendored
Normal file
45
vendor/git.iim.gay/grufwub/go-errors/once.go
vendored
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
package errors
|
||||
|
||||
import (
|
||||
"sync/atomic"
|
||||
"unsafe"
|
||||
)
|
||||
|
||||
// OnceError is an error structure that supports safe multi-threaded
|
||||
// usage and setting only once (until reset)
|
||||
type OnceError struct {
|
||||
err unsafe.Pointer
|
||||
}
|
||||
|
||||
// NewOnce returns a new OnceError instance
|
||||
func NewOnce() OnceError {
|
||||
return OnceError{
|
||||
err: nil,
|
||||
}
|
||||
}
|
||||
|
||||
func (e *OnceError) Store(err error) {
|
||||
// Nothing to do
|
||||
if err == nil {
|
||||
return
|
||||
}
|
||||
|
||||
// Only set if not already
|
||||
atomic.CompareAndSwapPointer(
|
||||
&e.err,
|
||||
nil,
|
||||
unsafe.Pointer(&err),
|
||||
)
|
||||
}
|
||||
|
||||
func (e *OnceError) Load() error {
|
||||
return *(*error)(atomic.LoadPointer(&e.err))
|
||||
}
|
||||
|
||||
func (e *OnceError) IsSet() bool {
|
||||
return (atomic.LoadPointer(&e.err) != nil)
|
||||
}
|
||||
|
||||
func (e *OnceError) Reset() {
|
||||
atomic.StorePointer(&e.err, nil)
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue