Skip to content

Commit 2b1bce7

Browse files
committed
feat: migrate from sync.Map to xsync.Map
Signed-off-by: egibs <20933572+egibs@users.noreply.github.com>
1 parent d092575 commit 2b1bce7

21 files changed

Lines changed: 197 additions & 257 deletions

cmd/mal/mal.go

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ import (
1717
"runtime"
1818
"slices"
1919
"strings"
20-
"sync"
2120
"syscall"
2221
"time"
2322

@@ -658,14 +657,7 @@ func main() {
658657
return fmt.Errorf("scan: %w", err)
659658
}
660659

661-
length := func(m *sync.Map) int {
662-
length := 0
663-
m.Range(func(_, _ any) bool {
664-
length++
665-
return true
666-
})
667-
return length
668-
}(&res.Files)
660+
length := res.Files.Size()
669661

670662
err = renderer.Full(ctx, &mc, res)
671663
if err != nil {

go.mod

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ require (
2121
github.com/klauspost/pgzip v1.2.6
2222
github.com/minio/sha256-simd v1.0.1
2323
github.com/olekukonko/tablewriter v1.1.3
24+
github.com/puzpuzpuz/xsync/v4 v4.4.0
2425
github.com/shirou/gopsutil/v4 v4.26.1
2526
github.com/ulikunitz/xz v0.5.15
2627
github.com/urfave/cli/v3 v3.6.2
@@ -40,31 +41,32 @@ require (
4041
github.com/charmbracelet/x/ansi v0.11.6 // indirect
4142
github.com/charmbracelet/x/cellbuf v0.0.15 // indirect
4243
github.com/charmbracelet/x/term v0.2.2 // indirect
43-
github.com/clipperhouse/displaywidth v0.10.0 // indirect
44-
github.com/clipperhouse/uax29/v2 v2.6.0 // indirect
44+
github.com/clipperhouse/displaywidth v0.11.0 // indirect
45+
github.com/clipperhouse/uax29/v2 v2.7.0 // indirect
4546
github.com/containerd/stargz-snapshotter/estargz v0.18.2 // indirect
4647
github.com/docker/cli v29.2.1+incompatible // indirect
4748
github.com/docker/distribution v2.8.3+incompatible // indirect
4849
github.com/docker/docker-credential-helpers v0.9.5 // indirect
49-
github.com/ebitengine/purego v0.9.1 // indirect
50+
github.com/ebitengine/purego v0.10.0 // indirect
5051
github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f // indirect
5152
github.com/go-ole/go-ole v1.3.0 // indirect
53+
github.com/goccy/go-json v0.10.5 // indirect
5254
github.com/klauspost/cpuid/v2 v2.3.0 // indirect
5355
github.com/kr/text v0.1.0 // indirect
5456
github.com/lucasb-eyer/go-colorful v1.3.0 // indirect
55-
github.com/lufia/plan9stats v0.0.0-20251013123823-9fd1530e3ec3 // indirect
57+
github.com/lufia/plan9stats v0.0.0-20260216142805-b3301c5f2a88 // indirect
5658
github.com/mailru/easyjson v0.9.1 // indirect
5759
github.com/mattn/go-colorable v0.1.14 // indirect
5860
github.com/mattn/go-isatty v0.0.20 // indirect
5961
github.com/mattn/go-localereader v0.0.1 // indirect
60-
github.com/mattn/go-runewidth v0.0.19 // indirect
62+
github.com/mattn/go-runewidth v0.0.20 // indirect
6163
github.com/mitchellh/go-homedir v1.1.0 // indirect
6264
github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 // indirect
6365
github.com/muesli/cancelreader v0.2.2 // indirect
6466
github.com/muesli/termenv v0.16.0 // indirect
6567
github.com/olekukonko/cat v0.0.0-20250911104152-50322a0618f6 // indirect
6668
github.com/olekukonko/errors v1.2.0 // indirect
67-
github.com/olekukonko/ll v0.1.6 // indirect
69+
github.com/olekukonko/ll v0.1.7 // indirect
6870
github.com/opencontainers/go-digest v1.0.0 // indirect
6971
github.com/opencontainers/image-spec v1.1.1 // indirect
7072
github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 // indirect

go.sum

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,10 @@ github.com/charmbracelet/x/cellbuf v0.0.15 h1:ur3pZy0o6z/R7EylET877CBxaiE1Sp1GMx
2828
github.com/charmbracelet/x/cellbuf v0.0.15/go.mod h1:J1YVbR7MUuEGIFPCaaZ96KDl5NoS0DAWkskup+mOY+Q=
2929
github.com/charmbracelet/x/term v0.2.2 h1:xVRT/S2ZcKdhhOuSP4t5cLi5o+JxklsoEObBSgfgZRk=
3030
github.com/charmbracelet/x/term v0.2.2/go.mod h1:kF8CY5RddLWrsgVwpw4kAa6TESp6EB5y3uxGLeCqzAI=
31-
github.com/clipperhouse/displaywidth v0.10.0 h1:GhBG8WuerxjFQQYeuZAeVTuyxuX+UraiZGD4HJQ3Y8g=
32-
github.com/clipperhouse/displaywidth v0.10.0/go.mod h1:XqJajYsaiEwkxOj4bowCTMcT1SgvHo9flfF3jQasdbs=
33-
github.com/clipperhouse/uax29/v2 v2.6.0 h1:z0cDbUV+aPASdFb2/ndFnS9ts/WNXgTNNGFoKXuhpos=
34-
github.com/clipperhouse/uax29/v2 v2.6.0/go.mod h1:Wn1g7MK6OoeDT0vL+Q0SQLDz/KpfsVRgg6W7ihQeh4g=
31+
github.com/clipperhouse/displaywidth v0.11.0 h1:lBc6kY44VFw+TDx4I8opi/EtL9m20WSEFgwIwO+UVM8=
32+
github.com/clipperhouse/displaywidth v0.11.0/go.mod h1:bkrFNkf81G8HyVqmKGxsPufD3JhNl3dSqnGhOoSD/o0=
33+
github.com/clipperhouse/uax29/v2 v2.7.0 h1:+gs4oBZ2gPfVrKPthwbMzWZDaAFPGYK72F0NJv2v7Vk=
34+
github.com/clipperhouse/uax29/v2 v2.7.0/go.mod h1:EFJ2TJMRUaplDxHKj1qAEhCtQPW2tJSwu5BF98AuoVM=
3535
github.com/containerd/stargz-snapshotter/estargz v0.18.2 h1:yXkZFYIzz3eoLwlTUZKz2iQ4MrckBxJjkmD16ynUTrw=
3636
github.com/containerd/stargz-snapshotter/estargz v0.18.2/go.mod h1:XyVU5tcJ3PRpkA9XS2T5us6Eg35yM0214Y+wvrZTBrY=
3737
github.com/cosnicolaou/pbzip2 v1.0.6 h1:FYF6b2j4X4q3hZezd2AoUN/emLCtH/MbDGwJjiOacak=
@@ -44,8 +44,8 @@ github.com/docker/distribution v2.8.3+incompatible h1:AtKxIZ36LoNK51+Z6RpzLpddBi
4444
github.com/docker/distribution v2.8.3+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
4545
github.com/docker/docker-credential-helpers v0.9.5 h1:EFNN8DHvaiK8zVqFA2DT6BjXE0GzfLOZ38ggPTKePkY=
4646
github.com/docker/docker-credential-helpers v0.9.5/go.mod h1:v1S+hepowrQXITkEfw6o4+BMbGot02wiKpzWhGUZK6c=
47-
github.com/ebitengine/purego v0.9.1 h1:a/k2f2HQU3Pi399RPW1MOaZyhKJL9w/xFpKAg4q1s0A=
48-
github.com/ebitengine/purego v0.9.1/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ=
47+
github.com/ebitengine/purego v0.10.0 h1:QIw4xfpWT6GWTzaW5XEKy3HXoqrJGx1ijYHzTF0/ISU=
48+
github.com/ebitengine/purego v0.10.0/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ=
4949
github.com/egibs/go-debian v0.19.3 h1:daSpxqoOL0i25KCuKcy5h+6ucQzSS9QD0hMAH6swRQc=
5050
github.com/egibs/go-debian v0.19.3/go.mod h1:heIPouUaS2YMRC8IIwUNZCZ44k3NJTm7u4XAHvgShnU=
5151
github.com/egibs/reconcile v0.2.2 h1:Y7+Qew218gnhwE73A4yz8ypU1cBfhML1ic6EXNLVvgc=
@@ -59,6 +59,8 @@ github.com/gabriel-vasile/mimetype v1.4.13/go.mod h1:d+9Oxyo1wTzWdyVUPMmXFvp4F9t
5959
github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
6060
github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE=
6161
github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78=
62+
github.com/goccy/go-json v0.10.5 h1:Fq85nIqj+gXn/S5ahsiTlK3TmC85qgirsdTP/+DeaC4=
63+
github.com/goccy/go-json v0.10.5/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M=
6264
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
6365
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
6466
github.com/google/go-containerregistry v0.21.0 h1:ocqxUOczFwAZQBMNE7kuzfqvDe0VWoZxQMOesXreCDI=
@@ -76,8 +78,8 @@ github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
7678
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
7779
github.com/lucasb-eyer/go-colorful v1.3.0 h1:2/yBRLdWBZKrf7gB40FoiKfAWYQ0lqNcbuQwVHXptag=
7880
github.com/lucasb-eyer/go-colorful v1.3.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0=
79-
github.com/lufia/plan9stats v0.0.0-20251013123823-9fd1530e3ec3 h1:PwQumkgq4/acIiZhtifTV5OUqqiP82UAl0h87xj/l9k=
80-
github.com/lufia/plan9stats v0.0.0-20251013123823-9fd1530e3ec3/go.mod h1:autxFIvghDt3jPTLoqZ9OZ7s9qTGNAWmYCjVFWPX/zg=
81+
github.com/lufia/plan9stats v0.0.0-20260216142805-b3301c5f2a88 h1:PTw+yKnXcOFCR6+8hHTyWBeQ/P4Nb7dd4/0ohEcWQuM=
82+
github.com/lufia/plan9stats v0.0.0-20260216142805-b3301c5f2a88/go.mod h1:autxFIvghDt3jPTLoqZ9OZ7s9qTGNAWmYCjVFWPX/zg=
8183
github.com/mailru/easyjson v0.9.1 h1:LbtsOm5WAswyWbvTEOqhypdPeZzHavpZx96/n553mR8=
8284
github.com/mailru/easyjson v0.9.1/go.mod h1:1+xMtQp2MRNVL/V1bOzuP3aP8VNwRW55fQUto+XFtTU=
8385
github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE=
@@ -86,8 +88,8 @@ github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWE
8688
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
8789
github.com/mattn/go-localereader v0.0.1 h1:ygSAOl7ZXTx4RdPYinUpg6W99U8jWvWi9Ye2JC/oIi4=
8890
github.com/mattn/go-localereader v0.0.1/go.mod h1:8fBrzywKY7BI3czFoHkuzRoWE9C+EiG4R1k4Cjx5p88=
89-
github.com/mattn/go-runewidth v0.0.19 h1:v++JhqYnZuu5jSKrk9RbgF5v4CGUjqRfBm05byFGLdw=
90-
github.com/mattn/go-runewidth v0.0.19/go.mod h1:XBkDxAl56ILZc9knddidhrOlY5R/pDhgLpndooCuJAs=
91+
github.com/mattn/go-runewidth v0.0.20 h1:WcT52H91ZUAwy8+HUkdM3THM6gXqXuLJi9O3rjcQQaQ=
92+
github.com/mattn/go-runewidth v0.0.20/go.mod h1:XBkDxAl56ILZc9knddidhrOlY5R/pDhgLpndooCuJAs=
9193
github.com/minio/sha256-simd v1.0.1 h1:6kaan5IFmwTNynnKKpDHe6FWHohJOHhCPchzK49dzMM=
9294
github.com/minio/sha256-simd v1.0.1/go.mod h1:Pz6AKMiUdngCLpeTL/RJY1M9rUuPMYujV5xJjtbRSN8=
9395
github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
@@ -102,8 +104,8 @@ github.com/olekukonko/cat v0.0.0-20250911104152-50322a0618f6 h1:zrbMGy9YXpIeTnGj
102104
github.com/olekukonko/cat v0.0.0-20250911104152-50322a0618f6/go.mod h1:rEKTHC9roVVicUIfZK7DYrdIoM0EOr8mK1Hj5s3JjH0=
103105
github.com/olekukonko/errors v1.2.0 h1:10Zcn4GeV59t/EGqJc8fUjtFT/FuUh5bTMzZ1XwmCRo=
104106
github.com/olekukonko/errors v1.2.0/go.mod h1:ppzxA5jBKcO1vIpCXQ9ZqgDh8iwODz6OXIGKU8r5m4Y=
105-
github.com/olekukonko/ll v0.1.6 h1:lGVTHO+Qc4Qm+fce/2h2m5y9LvqaW+DCN7xW9hsU3uA=
106-
github.com/olekukonko/ll v0.1.6/go.mod h1:NVUmjBb/aCtUpjKk75BhWrOlARz3dqsM+OtszpY4o88=
107+
github.com/olekukonko/ll v0.1.7 h1:WyK1YZwOTUKHEXZz3VydBDT5t3zDqa9yI8iJg5PHon4=
108+
github.com/olekukonko/ll v0.1.7/go.mod h1:RPRC6UcscfFZgjo1nulkfMH5IM0QAYim0LfnMvUuozw=
107109
github.com/olekukonko/tablewriter v1.1.3 h1:VSHhghXxrP0JHl+0NnKid7WoEmd9/urKRJLysb70nnA=
108110
github.com/olekukonko/tablewriter v1.1.3/go.mod h1:9VU0knjhmMkXjnMKrZ3+L2JhhtsQ/L38BbL3CRNE8tM=
109111
github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
@@ -116,6 +118,8 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb
116118
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
117119
github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 h1:o4JXh1EVt9k/+g42oCprj/FisM4qX9L3sZB3upGN2ZU=
118120
github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE=
121+
github.com/puzpuzpuz/xsync/v4 v4.4.0 h1:vlSN6/CkEY0pY8KaB0yqo/pCLZvp9nhdbBdjipT4gWo=
122+
github.com/puzpuzpuz/xsync/v4 v4.4.0/go.mod h1:VJDmTCJMBt8igNxnkQd86r+8KUeN1quSfNKu5bLYFQo=
119123
github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ=
120124
github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
121125
github.com/shirou/gopsutil/v4 v4.26.1 h1:TOkEyriIXk2HX9d4isZJtbjXbEjf5qyKPAzbzY0JWSo=

pkg/action/diff.go

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -167,30 +167,29 @@ func relFileReport(ctx context.Context, c malcontent.Config, fromPath string, is
167167
rangeErr error
168168
)
169169

170-
fromReport.Files.Range(func(key, value any) bool {
170+
fromReport.Files.Range(func(key string, fr *malcontent.FileReport) bool {
171171
if ctx.Err() != nil {
172172
return false
173173
}
174-
if key == nil || value == nil {
174+
if key == "" || fr == nil {
175175
return true
176176
}
177177

178-
if fr, ok := value.(*malcontent.FileReport); ok {
179-
isArchive := fr.ArchiveRoot != ""
180-
if fr.Skipped != "" {
181-
return true
182-
}
183-
184-
rel, b, err := relPath(fromPath, fr, isArchive, isImage)
185-
if err != nil {
186-
rangeErr = err
187-
return false
188-
}
178+
isArchive := fr.ArchiveRoot != ""
179+
if fr.Skipped != "" {
180+
return true
181+
}
189182

190-
fr.PreviousRelPath = rel
191-
fromRelPath[rel] = fr
192-
base = b
183+
rel, b, err := relPath(fromPath, fr, isArchive, isImage)
184+
if err != nil {
185+
rangeErr = err
186+
return false
193187
}
188+
189+
fr.PreviousRelPath = rel
190+
fromRelPath[rel] = fr
191+
base = b
192+
194193
return true
195194
})
196195

pkg/action/fuzz_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,11 @@ import (
88
"os"
99
"path/filepath"
1010
"strings"
11-
"sync"
1211
"testing"
1312
"time"
1413

1514
"github.com/chainguard-dev/malcontent/pkg/malcontent"
15+
"github.com/puzpuzpuz/xsync/v4"
1616
)
1717

1818
// FuzzCleanPath fuzzes the CleanPath function.
@@ -66,7 +66,7 @@ func FuzzExitIfHitOrMiss(f *testing.F) {
6666
}
6767

6868
// When both flags are false, always returns nil, nil
69-
m := &sync.Map{}
69+
m := xsync.NewMap[string, *malcontent.FileReport]()
7070
behaviors := make([]*malcontent.Behavior, numBehaviors)
7171
for i := range numBehaviors {
7272
behaviors[i] = &malcontent.Behavior{ID: "test"}

0 commit comments

Comments
 (0)