switch result pointer with channel
This commit is contained in:
@@ -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).
|
||||
|
11
utils.go
11
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)
|
||||
|
Reference in New Issue
Block a user