Progress & Semaphone aren't incremented on defer worker
Opened this issue · 1 comments
package main
import (
"context"
"runtime"
"time"
"github.com/nabbar/golib/semaphore"
mpbv8 "github.com/vbauerster/mpb/v8"
)
const total = 100
func main() {
// Create bar from semaphore
sem := semaphore.New(context.Background(), runtime.GOMAXPROCS(0), true, mpbv8.WithWidth(64)).
BarNumber("test", "", total, false, nil)
// Defer semaphore end
defer sem.DeferMain()
for _ = range total {
// Try to acquire new worker on semaphore
if e := sem.NewWorker(); e != nil {
panic(e)
}
// Execute goroutine calling DeferWorker
go func() {
defer sem.DeferWorker() // progress & semaphone current won't be incremented on defer worker
time.Sleep(100 * time.Millisecond)
//sem.Inc(1) // workaround
}()
}
if e := sem.WaitAll(); e != nil {
panic(e)
}
}
Hi @sabouaram & @nabbar
I think this issue can be fixed by updating the function DeferWorker
in file semaphore/bar/semaphore.go as follow :
func (o *bar) DeferWorker() {
o.Inc(1) // Increment current value of the bar
o.s.DeferWorker() // Release one thread from semaphore
}
Regards,
Thomas 🤠