From a79004388fb6c612c64fcfe14942f3716ad2172d Mon Sep 17 00:00:00 2001 From: Ingo Oppermann Date: Thu, 31 Oct 2024 22:11:53 +0100 Subject: [PATCH] Fix potential CPU leak --- resources/psutil/process.go | 29 ++++++++++------------------- 1 file changed, 10 insertions(+), 19 deletions(-) diff --git a/resources/psutil/process.go b/resources/psutil/process.go index bb2f9064..033e8756 100644 --- a/resources/psutil/process.go +++ b/resources/psutil/process.go @@ -148,28 +148,9 @@ func (p *process) Resume() error { func (p *process) CPU() (*CPUInfo, error) { var diff float64 - for { - p.lock.RLock() - nTicks := p.nTicks - p.lock.RUnlock() - - if nTicks < 2 { - time.Sleep(100 * time.Millisecond) - continue - } - - break - } - p.lock.RLock() defer p.lock.RUnlock() - if p.hasCgroup && p.cpuLimit > 0 { - diff = float64(p.cpuLimit) * (p.statCurrentTime.Sub(p.statPreviousTime)).Seconds() / 1e9 - } else { - diff = p.statCurrentTime.Sub(p.statPreviousTime).Seconds() * p.ncpu - } - s := &CPUInfo{ System: 0, User: 0, @@ -177,6 +158,16 @@ func (p *process) CPU() (*CPUInfo, error) { Other: 0, } + if p.nTicks < 2 { + return s, nil + } + + if p.hasCgroup && p.cpuLimit > 0 { + diff = float64(p.cpuLimit) * (p.statCurrentTime.Sub(p.statPreviousTime)).Seconds() / 1e9 + } else { + diff = p.statCurrentTime.Sub(p.statPreviousTime).Seconds() * p.ncpu + } + if diff <= 0 { return s, nil }