fix: update locks; bump: 0.1.10
This commit is contained in:
parent
d75e8a9725
commit
55ef377926
22
waiter.go
22
waiter.go
@ -13,7 +13,20 @@ type Waiter struct {
|
|||||||
blockingMode bool
|
blockingMode bool
|
||||||
waitGroup sync.WaitGroup
|
waitGroup sync.WaitGroup
|
||||||
closeHandlers []*CloseHandler
|
closeHandlers []*CloseHandler
|
||||||
isHalting bool
|
haltingFlag bool
|
||||||
|
haltingMutex sync.RWMutex
|
||||||
|
}
|
||||||
|
|
||||||
|
func (w *Waiter) isHalting() bool {
|
||||||
|
w.haltingMutex.RLock()
|
||||||
|
defer w.haltingMutex.RUnlock()
|
||||||
|
return w.haltingFlag
|
||||||
|
}
|
||||||
|
|
||||||
|
func (w *Waiter) setHalting(value bool) {
|
||||||
|
w.haltingMutex.Lock()
|
||||||
|
defer w.haltingMutex.Unlock()
|
||||||
|
w.haltingFlag = value
|
||||||
}
|
}
|
||||||
|
|
||||||
func (w *Waiter) addHandler(f *func(), autoDone bool) *CloseHandler {
|
func (w *Waiter) addHandler(f *func(), autoDone bool) *CloseHandler {
|
||||||
@ -63,10 +76,10 @@ func (w *Waiter) AddCloseHandler(f func(), waitForChannel bool) *CloseHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (w *Waiter) Halt(err error) {
|
func (w *Waiter) Halt(err error) {
|
||||||
if w.isHalting {
|
if w.isHalting() {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
w.isHalting = true
|
w.setHalting(true)
|
||||||
|
|
||||||
w.RLock()
|
w.RLock()
|
||||||
for _, h := range w.closeHandlers {
|
for _, h := range w.closeHandlers {
|
||||||
@ -87,7 +100,7 @@ func (w *Waiter) Halt(err error) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
w.isHalting = false
|
w.setHalting(false)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (w *Waiter) Wait() {
|
func (w *Waiter) Wait() {
|
||||||
@ -109,6 +122,7 @@ func NewWaiter() *Waiter {
|
|||||||
sync.WaitGroup{},
|
sync.WaitGroup{},
|
||||||
make([]*CloseHandler, 0),
|
make([]*CloseHandler, 0),
|
||||||
false,
|
false,
|
||||||
|
sync.RWMutex{},
|
||||||
}
|
}
|
||||||
sigs := make(chan os.Signal, 1)
|
sigs := make(chan os.Signal, 1)
|
||||||
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
|
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user