| 123456789101112131415161718192021222324252627282930313233343536 |
- package torrent
- import "github.com/anacrolix/sync"
- // Runs deferred actions on Unlock. Note that actions are assumed to be the results of changes that
- // would only occur with a write lock at present. The race detector should catch instances of defers
- // without the write lock being held.
- type lockWithDeferreds struct {
- internal sync.RWMutex
- unlockActions []func()
- }
- func (me *lockWithDeferreds) Lock() {
- me.internal.Lock()
- }
- func (me *lockWithDeferreds) Unlock() {
- unlockActions := me.unlockActions
- for i := 0; i < len(unlockActions); i += 1 {
- unlockActions[i]()
- }
- me.unlockActions = unlockActions[:0]
- me.internal.Unlock()
- }
- func (me *lockWithDeferreds) RLock() {
- me.internal.RLock()
- }
- func (me *lockWithDeferreds) RUnlock() {
- me.internal.RUnlock()
- }
- func (me *lockWithDeferreds) Defer(action func()) {
- me.unlockActions = append(me.unlockActions, action)
- }
|