diff options
author | Caleb Bassi <calebjbassi@gmail.com> | 2019-01-19 20:45:02 -0800 |
---|---|---|
committer | Caleb Bassi <calebjbassi@gmail.com> | 2019-01-19 20:46:33 -0800 |
commit | cf0092074563a70706d8b9914de4ccbdcc16eb2f (patch) | |
tree | aa80285ea6b74754e2af6ca909275ff706be5c24 | |
parent | 97f490be800eb3dd2092c7a1cce339272456e024 (diff) |
Fix data race for CPU widget
-rw-r--r-- | src/widgets/cpu.go | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/src/widgets/cpu.go b/src/widgets/cpu.go index 4502fa8..a7b0300 100644 --- a/src/widgets/cpu.go +++ b/src/widgets/cpu.go @@ -17,6 +17,7 @@ type CPU struct { PerCPU bool // show per-core load interval time.Duration formatString string + renderLock *sync.RWMutex } func NewCPU(renderLock *sync.RWMutex, interval time.Duration, horizontalScale int, average bool, percpu bool) *CPU { @@ -35,6 +36,7 @@ func NewCPU(renderLock *sync.RWMutex, interval time.Duration, horizontalScale in Average: average, PerCPU: percpu, formatString: formatString, + renderLock: renderLock, } self.Title = " CPU Usage " self.HorizontalScale = horizontalScale @@ -63,9 +65,7 @@ func NewCPU(renderLock *sync.RWMutex, interval time.Duration, horizontalScale in go func() { ticker := time.NewTicker(self.interval) for range ticker.C { - renderLock.RLock() self.update() - renderLock.RUnlock() } }() @@ -76,6 +76,8 @@ func (self *CPU) update() { if self.Average { go func() { percent, err := psCPU.Percent(self.interval, false) + self.renderLock.RLock() + defer self.renderLock.RUnlock() if err != nil { log.Printf("failed to get average CPU usage percent from gopsutil: %v. self.interval: %v. percpu: %v", err, self.interval, false) } else { @@ -88,6 +90,8 @@ func (self *CPU) update() { if self.PerCPU { go func() { percents, err := psCPU.Percent(self.interval, true) + self.renderLock.RLock() + defer self.renderLock.RUnlock() if err != nil { log.Printf("failed to get CPU usage percents from gopsutil: %v. self.interval: %v. percpu: %v", err, self.interval, true) } else { |