mirror of
https://github.com/aptly-dev/aptly.git
synced 2026-07-26 13:47:40 +00:00
Fix data race in p.Bar being read and written from different goroutines.
This commit is contained in:
+12
-1
@@ -14,6 +14,8 @@ const (
|
|||||||
codeHideProgress
|
codeHideProgress
|
||||||
codeStop
|
codeStop
|
||||||
codeFlush
|
codeFlush
|
||||||
|
codeBarEnabled
|
||||||
|
codeBarDisabled
|
||||||
)
|
)
|
||||||
|
|
||||||
type printTask struct {
|
type printTask struct {
|
||||||
@@ -81,6 +83,8 @@ func (p *Progress) InitBar(count int64, isBytes bool) {
|
|||||||
p.bar.SetUnits(pb.U_BYTES)
|
p.bar.SetUnits(pb.U_BYTES)
|
||||||
p.bar.ShowSpeed = true
|
p.bar.ShowSpeed = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
p.queue <- printTask{code: codeBarEnabled}
|
||||||
p.bar.Start()
|
p.bar.Start()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -91,6 +95,7 @@ func (p *Progress) ShutdownBar() {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
p.bar.Finish()
|
p.bar.Finish()
|
||||||
|
p.queue <- printTask{code: codeBarDisabled}
|
||||||
p.bar = nil
|
p.bar = nil
|
||||||
p.queue <- printTask{code: codeHideProgress}
|
p.queue <- printTask{code: codeHideProgress}
|
||||||
}
|
}
|
||||||
@@ -151,9 +156,15 @@ func (p *Progress) ColoredPrintf(msg string, a ...interface{}) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (p *Progress) worker() {
|
func (p *Progress) worker() {
|
||||||
|
hasBar := false
|
||||||
|
|
||||||
for {
|
for {
|
||||||
task := <-p.queue
|
task := <-p.queue
|
||||||
switch task.code {
|
switch task.code {
|
||||||
|
case codeBarEnabled:
|
||||||
|
hasBar = true
|
||||||
|
case codeBarDisabled:
|
||||||
|
hasBar = false
|
||||||
case codePrint:
|
case codePrint:
|
||||||
if p.barShown {
|
if p.barShown {
|
||||||
fmt.Print("\r\033[2K")
|
fmt.Print("\r\033[2K")
|
||||||
@@ -161,7 +172,7 @@ func (p *Progress) worker() {
|
|||||||
}
|
}
|
||||||
fmt.Print(task.message)
|
fmt.Print(task.message)
|
||||||
case codeProgress:
|
case codeProgress:
|
||||||
if p.bar != nil {
|
if hasBar {
|
||||||
fmt.Print("\r" + task.message)
|
fmt.Print("\r" + task.message)
|
||||||
p.barShown = true
|
p.barShown = true
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user