Merge pull request #701 from Random-Liu/fix-event-monitor-panic
Fix event monitor panic.
This commit is contained in:
commit
896e347000
@ -17,6 +17,7 @@ limitations under the License.
|
||||
package server
|
||||
|
||||
import (
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
eventtypes "github.com/containerd/containerd/api/events"
|
||||
@ -57,6 +58,8 @@ type eventMonitor struct {
|
||||
|
||||
type backOff struct {
|
||||
queuePool map[string]*backOffQueue
|
||||
// tickerMu is mutex used to protect the ticker.
|
||||
tickerMu sync.Mutex
|
||||
ticker *time.Ticker
|
||||
minDuration time.Duration
|
||||
maxDuration time.Duration
|
||||
@ -120,8 +123,8 @@ func (em *eventMonitor) start() (<-chan struct{}, error) {
|
||||
return nil, errors.New("event channel is nil")
|
||||
}
|
||||
closeCh := make(chan struct{})
|
||||
go func() {
|
||||
backOffCheckCh := em.backOff.start()
|
||||
go func() {
|
||||
for {
|
||||
select {
|
||||
case e := <-em.ch:
|
||||
@ -366,13 +369,19 @@ func (b *backOff) reBackOff(key string, events []interface{}, oldDuration time.D
|
||||
}
|
||||
|
||||
func (b *backOff) start() <-chan time.Time {
|
||||
b.tickerMu.Lock()
|
||||
defer b.tickerMu.Unlock()
|
||||
b.ticker = time.NewTicker(b.checkDuration)
|
||||
return b.ticker.C
|
||||
}
|
||||
|
||||
func (b *backOff) stop() {
|
||||
b.tickerMu.Lock()
|
||||
defer b.tickerMu.Unlock()
|
||||
if b.ticker != nil {
|
||||
b.ticker.Stop()
|
||||
}
|
||||
}
|
||||
|
||||
func newBackOffQueue(events []interface{}, init time.Duration, c clock.Clock) *backOffQueue {
|
||||
return &backOffQueue{
|
||||
|
Loading…
Reference in New Issue
Block a user