mirror of
https://github.com/rclone/rclone.git
synced 2024-12-13 02:33:58 +01:00
39 lines
574 B
Go
39 lines
574 B
Go
// Copyright (C) 2019 Storj Labs, Inc.
|
|
// See LICENSE for copying information.
|
|
|
|
package drpcstream
|
|
|
|
import "sync"
|
|
|
|
type chMutex struct {
|
|
ch chan struct{}
|
|
once sync.Once
|
|
}
|
|
|
|
func (m *chMutex) init() { m.ch = make(chan struct{}, 1) }
|
|
|
|
func (m *chMutex) Chan() chan struct{} {
|
|
m.once.Do(m.init)
|
|
return m.ch
|
|
}
|
|
|
|
func (m *chMutex) Lock() {
|
|
m.once.Do(m.init)
|
|
m.ch <- struct{}{}
|
|
}
|
|
|
|
func (m *chMutex) TryLock() bool {
|
|
m.once.Do(m.init)
|
|
select {
|
|
case m.ch <- struct{}{}:
|
|
return true
|
|
default:
|
|
return false
|
|
}
|
|
}
|
|
|
|
func (m *chMutex) Unlock() {
|
|
m.once.Do(m.init)
|
|
<-m.ch
|
|
}
|