imap: fix double closing idleStop
The idle restart code is at the end of handleMessage in the worker. However if an unsupported msg comes in, we returned early, skipping the re-init. That lead to a crash due to double closing idleStop in the next iteration.
This commit is contained in:
parent
3e7e236f50
commit
30c0a9fba4
1 changed files with 4 additions and 2 deletions
|
@ -66,6 +66,8 @@ func (w *IMAPWorker) handleMessage(msg types.WorkerMessage) error {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var reterr error // will be returned at the end, needed to support idle
|
||||||
|
|
||||||
switch msg := msg.(type) {
|
switch msg := msg.(type) {
|
||||||
case *types.Unsupported:
|
case *types.Unsupported:
|
||||||
// No-op
|
// No-op
|
||||||
|
@ -180,7 +182,7 @@ func (w *IMAPWorker) handleMessage(msg types.WorkerMessage) error {
|
||||||
case *types.SearchDirectory:
|
case *types.SearchDirectory:
|
||||||
w.handleSearchDirectory(msg)
|
w.handleSearchDirectory(msg)
|
||||||
default:
|
default:
|
||||||
return errUnsupported
|
reterr = errUnsupported
|
||||||
}
|
}
|
||||||
|
|
||||||
if w.idleStop != nil {
|
if w.idleStop != nil {
|
||||||
|
@ -189,7 +191,7 @@ func (w *IMAPWorker) handleMessage(msg types.WorkerMessage) error {
|
||||||
w.idleDone <- w.client.idle.IdleWithFallback(w.idleStop, 0)
|
w.idleDone <- w.client.idle.IdleWithFallback(w.idleStop, 0)
|
||||||
}()
|
}()
|
||||||
}
|
}
|
||||||
return nil
|
return reterr
|
||||||
}
|
}
|
||||||
|
|
||||||
func (w *IMAPWorker) handleImapUpdate(update client.Update) {
|
func (w *IMAPWorker) handleImapUpdate(update client.Update) {
|
||||||
|
|
Loading…
Reference in a new issue