@@ -11,7 +11,7 @@ import (
1111 "time"
1212
1313 "github.com/samber/lo"
14- "golang.org/x/sync/semaphore "
14+ "golang.org/x/sync/errgroup "
1515
1616 "github.com/Zxilly/go-size-analyzer/internal/disasm"
1717 "github.com/Zxilly/go-size-analyzer/internal/entity"
@@ -53,17 +53,12 @@ func (k *KnownInfo) Disasm() error {
5353
5454 var (
5555 maxWorkers = runtime .GOMAXPROCS (0 )
56- sem = semaphore . NewWeighted ( int64 ( maxWorkers ))
56+ eg = errgroup. Group {}
5757 )
58+ eg .SetLimit (maxWorkers )
5859
5960 for fn := range k .Deps .Functions {
60- if err = sem .Acquire (resultProcess , 1 ); err != nil {
61- slog .Error (fmt .Sprintf ("Failed to acquire semaphore: %v" , err ))
62- break
63- }
64-
65- go func (fn * entity.Function ) {
66- defer sem .Release (1 )
61+ eg .Go (func () error {
6762 candidates := e .Extract (fn .Addr , fn .Addr + fn .CodeSize )
6863
6964 lo .ForEach (candidates , func (p disasm.PossibleStr , _ int ) {
@@ -73,15 +68,17 @@ func (k *KnownInfo) Disasm() error {
7368 fn : fn ,
7469 }
7570 })
76- }(fn )
71+
72+ return nil
73+ })
7774 }
7875
79- if err = sem .Acquire (resultProcess , int64 (maxWorkers )); err != nil {
80- slog .Error (fmt .Sprintf ("Failed to acquire semaphore for all workers: %v" , err ))
76+ if err = eg .Wait (); err != nil {
77+ slog .Error (fmt .Sprintf ("Disassemble functions failed: %v" , err ))
78+ return err
8179 }
8280
8381 close (resultChan )
84-
8582 <- resultProcess .Done ()
8683
8784 slog .Info (fmt .Sprintf ("Disassemble functions done, took %s" , time .Since (startTime )))
0 commit comments