34 lines
513 B
Go
34 lines
513 B
Go
package internal
|
|
|
|
import (
|
|
"sync"
|
|
)
|
|
|
|
type CustomRwMutex struct {
|
|
mu *sync.RWMutex
|
|
}
|
|
|
|
func NewCustomRwMutex() *CustomRwMutex {
|
|
return &CustomRwMutex{
|
|
mu: &sync.RWMutex{},
|
|
}
|
|
}
|
|
|
|
func (rwMu *CustomRwMutex) WriteHandler(fn func() error) error {
|
|
rwMu.mu.Lock()
|
|
defer rwMu.mu.Unlock()
|
|
if err := fn(); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (rwMu *CustomRwMutex) ReadHandler(fn func() error) error {
|
|
rwMu.mu.RLock()
|
|
defer rwMu.mu.RUnlock()
|
|
if err := fn(); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|