diff --git a/progress/progress.go b/progress/progress.go index cf843c5..9d6e4b3 100644 --- a/progress/progress.go +++ b/progress/progress.go @@ -77,6 +77,15 @@ func (p *Progress) AppendTracker(t *Tracker) { } p.overallTracker.start() } + + // corner case: overall tracker is done, but new tracker is being added. We should recover it. + // issue: #245 + if p.overallTracker.IsDone() { + p.overallTracker.mutex.Lock() + p.overallTracker.done = false + p.overallTracker.mutex.Unlock() + } + p.trackersInQueueMutex.Lock() p.trackersInQueue = append(p.trackersInQueue, t) p.trackersInQueueMutex.Unlock() diff --git a/progress/progress_test.go b/progress/progress_test.go index 3dd9322..6ff4c7e 100644 --- a/progress/progress_test.go +++ b/progress/progress_test.go @@ -238,3 +238,11 @@ func TestProgress_Style(t *testing.T) { assert.NotNil(t, p.Style()) assert.Equal(t, StyleDefault.Name, p.Style().Name) } + +func TestProgress_OverallTrackerDisappearsCase(t *testing.T) { + p := &Progress{} + p.overallTracker = &Tracker{Total: 1, done: true} + p.AppendTracker(&Tracker{Total: 1}) + + assert.Equal(t, false, p.overallTracker.IsDone()) +}