From 9b9dd19d7dfe826789f0690f84d9f59470ad9e82 Mon Sep 17 00:00:00 2001
From: zeripath <art27@cantab.net>
Date: Sat, 1 Feb 2020 23:43:50 +0000
Subject: [PATCH] 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>
---
 modules/queue/manager.go | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/modules/queue/manager.go b/modules/queue/manager.go
index a6734787a9..3e9f8fc8db 100644
--- a/modules/queue/manager.go
+++ b/modules/queue/manager.go
@@ -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()
 			}