From 7eb5e8a08ac1f53cf52f327cb6e2fea9cb12c110 Mon Sep 17 00:00:00 2001 From: beorn7 Date: Sat, 29 Sep 2018 10:43:39 +0200 Subject: [PATCH] Drain the desc channel after registering This avoids leaking goroutines. Signed-off-by: beorn7 --- prometheus/registry.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/prometheus/registry.go b/prometheus/registry.go index 2c0b908..8d274e0 100644 --- a/prometheus/registry.go +++ b/prometheus/registry.go @@ -273,7 +273,12 @@ func (r *Registry) Register(c Collector) error { close(descChan) }() r.mtx.Lock() - defer r.mtx.Unlock() + defer func() { + // Drain channel in case of premature return to not leak a goroutine. + for range descChan { + } + r.mtx.Unlock() + }() // Conduct various tests... for desc := range descChan {