client_golang icon indicating copy to clipboard operation
client_golang copied to clipboard

A potential goroutine memory leak

Open xuxiaofan1203 opened this issue 11 months ago • 2 comments

Hello, I found a potential bug when I used the project, I'm not sure I'm right, we can discuss the problem to avoid a potential trouble possibly.

Blocking position: https://github.com/prometheus/client_golang/blob/26e3055e5133a9d64e8e5a07a7cf026875d5f55d/prometheus/registry.go#L472 At line 449 call the wg.Add(goroutineBudget), and wg.Wait() is blocked until wg.Done() is called the number of goroutineBudget times to awaken the wg.Wait(). But if the select statement chooses the default path, return the function, maybe the wg.Done() has not executed enough times to awaken the wg.Wait(), which can result in a goroutine leak https://github.com/prometheus/client_golang/blob/26e3055e5133a9d64e8e5a07a7cf026875d5f55d/prometheus/registry.go#L451-L463 Complete codes of the part https://github.com/prometheus/client_golang/blob/26e3055e5133a9d64e8e5a07a7cf026875d5f55d/prometheus/registry.go#L449-L475

xuxiaofan1203 avatar Mar 26 '24 12:03 xuxiaofan1203