Fix data race for CPU widget
This commit is contained in:
parent
97f490be80
commit
cf00920745
@ -17,6 +17,7 @@ type CPU struct {
|
|||||||
PerCPU bool // show per-core load
|
PerCPU bool // show per-core load
|
||||||
interval time.Duration
|
interval time.Duration
|
||||||
formatString string
|
formatString string
|
||||||
|
renderLock *sync.RWMutex
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewCPU(renderLock *sync.RWMutex, interval time.Duration, horizontalScale int, average bool, percpu bool) *CPU {
|
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,
|
Average: average,
|
||||||
PerCPU: percpu,
|
PerCPU: percpu,
|
||||||
formatString: formatString,
|
formatString: formatString,
|
||||||
|
renderLock: renderLock,
|
||||||
}
|
}
|
||||||
self.Title = " CPU Usage "
|
self.Title = " CPU Usage "
|
||||||
self.HorizontalScale = horizontalScale
|
self.HorizontalScale = horizontalScale
|
||||||
@ -63,9 +65,7 @@ func NewCPU(renderLock *sync.RWMutex, interval time.Duration, horizontalScale in
|
|||||||
go func() {
|
go func() {
|
||||||
ticker := time.NewTicker(self.interval)
|
ticker := time.NewTicker(self.interval)
|
||||||
for range ticker.C {
|
for range ticker.C {
|
||||||
renderLock.RLock()
|
|
||||||
self.update()
|
self.update()
|
||||||
renderLock.RUnlock()
|
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
@ -76,6 +76,8 @@ func (self *CPU) update() {
|
|||||||
if self.Average {
|
if self.Average {
|
||||||
go func() {
|
go func() {
|
||||||
percent, err := psCPU.Percent(self.interval, false)
|
percent, err := psCPU.Percent(self.interval, false)
|
||||||
|
self.renderLock.RLock()
|
||||||
|
defer self.renderLock.RUnlock()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("failed to get average CPU usage percent from gopsutil: %v. self.interval: %v. percpu: %v", err, self.interval, false)
|
log.Printf("failed to get average CPU usage percent from gopsutil: %v. self.interval: %v. percpu: %v", err, self.interval, false)
|
||||||
} else {
|
} else {
|
||||||
@ -88,6 +90,8 @@ func (self *CPU) update() {
|
|||||||
if self.PerCPU {
|
if self.PerCPU {
|
||||||
go func() {
|
go func() {
|
||||||
percents, err := psCPU.Percent(self.interval, true)
|
percents, err := psCPU.Percent(self.interval, true)
|
||||||
|
self.renderLock.RLock()
|
||||||
|
defer self.renderLock.RUnlock()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("failed to get CPU usage percents from gopsutil: %v. self.interval: %v. percpu: %v", err, self.interval, true)
|
log.Printf("failed to get CPU usage percents from gopsutil: %v. self.interval: %v. percpu: %v", err, self.interval, true)
|
||||||
} else {
|
} else {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user