Skip to content

Commit e09a7da

Browse files
committed
refactor: use errgroup for disasm
Signed-off-by: Zxilly <[email protected]>
1 parent c30ef4d commit e09a7da

File tree

1 file changed

+10
-13
lines changed

1 file changed

+10
-13
lines changed

internal/knowninfo/disasm.go

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)