summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCaleb Bassi <calebjbassi@gmail.com>2019-01-19 20:45:02 -0800
committerCaleb Bassi <calebjbassi@gmail.com>2019-01-19 20:46:33 -0800
commitcf0092074563a70706d8b9914de4ccbdcc16eb2f (patch)
treeaa80285ea6b74754e2af6ca909275ff706be5c24
parent97f490be800eb3dd2092c7a1cce339272456e024 (diff)
Fix data race for CPU widget
-rw-r--r--src/widgets/cpu.go8
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 {