Fix broken FlushAll (#10101)

* go function contexting is not what you expect

* Apply suggestions from code review

Co-Authored-By: Lauris BH <lauris@nix.lv>

Co-authored-by: Lauris BH <lauris@nix.lv>
This commit is contained in:
zeripath 2020-02-01 23:43:50 +00:00 committed by GitHub
parent 72f9cfc8f0
commit 9b9dd19d7d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -183,17 +183,17 @@ func (m *Manager) FlushAll(baseCtx context.Context, timeout time.Duration) error
}
allEmpty = false
if flushable, ok := mq.Managed.(Flushable); ok {
go func() {
go func(q *ManagedQueue) {
localCtx, localCancel := context.WithCancel(ctx)
pid := mq.RegisterWorkers(1, start, hasTimeout, end, localCancel, true)
pid := q.RegisterWorkers(1, start, hasTimeout, end, localCancel, true)
err := flushable.FlushWithContext(localCtx)
if err != nil && err != ctx.Err() {
cancel()
}
mq.CancelWorkers(pid)
q.CancelWorkers(pid)
localCancel()
wg.Done()
}()
}(mq)
} else {
wg.Done()
}