From bcfaccfec502cdbe9d7675966c33e16bbbe807a0 Mon Sep 17 00:00:00 2001 From: Giovanni Harting <539@idlegandalf.com> Date: Sat, 22 Mar 2025 23:13:15 +0100 Subject: [PATCH] switch result pointer with channel --- proto_package.go | 12 +++++------- utils.go | 11 +++++++---- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/proto_package.go b/proto_package.go index 0c62bb5..3632fd1 100644 --- a/proto_package.go +++ b/proto_package.go @@ -220,16 +220,14 @@ func (p *ProtoPackage) build(ctx context.Context) (time.Duration, error) { log.Errorf("error getting PGID: %v", err) } - var peakMem *int64 done := make(chan bool) - go pollMemoryUsage(pgid, 1*time.Second, done, peakMem) + result := make(chan int64) + go pollMemoryUsage(pgid, 1*time.Second, done, result) err = cmd.Wait() close(done) - - if peakMem == nil { - log.Warningf("memory reading failed") - } + close(result) + peakMem := <-result Rusage, ok := cmd.ProcessState.SysUsage().(*syscall.Rusage) if !ok { @@ -329,7 +327,7 @@ func (p *ProtoPackage) build(ctx context.Context) (time.Duration, error) { SetBuildTimeStart(start). SetLastVersionBuild(p.Version). SetTagRev(p.State.TagRev). - SetMaxRss(*peakMem). + SetMaxRss(peakMem). SetIoOut(Rusage.Oublock). SetIoIn(Rusage.Inblock). SetUTime(Rusage.Utime.Sec). diff --git a/utils.go b/utils.go index 292b89e..4c33d0f 100644 --- a/utils.go +++ b/utils.go @@ -849,10 +849,13 @@ func getMemoryStats(pid int) (MemStats, error) { return stats, nil } -func pollMemoryUsage(pid int, interval time.Duration, done chan bool, peakMem *int64) { +func pollMemoryUsage(pid int, interval time.Duration, done chan bool, result chan int64) { + var totalMemory int64 + for { select { case <-done: + result <- totalMemory return default: var totalRSS, totalSwap int64 @@ -878,9 +881,9 @@ func pollMemoryUsage(pid int, interval time.Duration, done chan bool, peakMem *i } } - totalMemory := totalRSS + totalSwap - if peakMem == nil || totalMemory > *peakMem { - peakMem = &totalMemory + newMemory := totalRSS + totalSwap + if newMemory > totalMemory { + totalMemory = newMemory } time.Sleep(interval)