-
Notifications
You must be signed in to change notification settings - Fork 347
Fix event monitor panic. #701
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -17,6 +17,7 @@ limitations under the License. | |
| package server | ||
|
|
||
| import ( | ||
| "sync" | ||
| "time" | ||
|
|
||
| eventtypes "github.com/containerd/containerd/api/events" | ||
|
|
@@ -56,7 +57,9 @@ type eventMonitor struct { | |
| } | ||
|
|
||
| type backOff struct { | ||
| queuePool map[string]*backOffQueue | ||
| 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{}) | ||
| backOffCheckCh := em.backOff.start() | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. good! |
||
| go func() { | ||
| backOffCheckCh := em.backOff.start() | ||
| for { | ||
| select { | ||
| case e := <-em.ch: | ||
|
|
@@ -366,12 +369,18 @@ 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.ticker.Stop() | ||
| b.tickerMu.Lock() | ||
| defer b.tickerMu.Unlock() | ||
| if b.ticker != nil { | ||
| b.ticker.Stop() | ||
| } | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. else...logrus.WithError(err).Error("attempt to stop ticker before start has completed allocating the ticker") note: should be impossible for this to happen now that you have a mutex... if the log is impossible we don't need the nil check..
Member
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This is possible, user may
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. user interrupts ... interesting thx |
||
| } | ||
|
|
||
| func newBackOffQueue(events []interface{}, init time.Duration, c clock.Clock) *backOffQueue { | ||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
go fmt
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
That is
gofmtresult.