Skip to content

Commit 98f1ae2

Browse files
cristalolega-h
andauthoredFeb 23, 2025··
fix: data race in errs []error pattern (#1073)
Co-authored-by: Adrian Hesketh <adrianhesketh@hushmail.com>
1 parent d9154cb commit 98f1ae2

File tree

2 files changed

+15
-11
lines changed

2 files changed

+15
-11
lines changed
 

‎generator/htmldiff/diff.go

+7-7
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,15 @@ func DiffStrings(expected, actual string) (diff string, err error) {
1818
var wg sync.WaitGroup
1919
wg.Add(2)
2020

21-
var errs []error
21+
errs := make([]error, 2)
2222

2323
// Format expected.
2424
go func() {
2525
defer wg.Done()
2626
e := new(strings.Builder)
2727
err := htmlformat.Fragment(e, strings.NewReader(expected))
2828
if err != nil {
29-
errs = append(errs, fmt.Errorf("expected html formatting error: %w", err))
29+
errs[0] = fmt.Errorf("expected html formatting error: %w", err)
3030
}
3131
expected = e.String()
3232
}()
@@ -37,7 +37,7 @@ func DiffStrings(expected, actual string) (diff string, err error) {
3737
a := new(strings.Builder)
3838
err := htmlformat.Fragment(a, strings.NewReader(actual))
3939
if err != nil {
40-
errs = append(errs, fmt.Errorf("actual html formatting error: %w", err))
40+
errs[1] = fmt.Errorf("actual html formatting error: %w", err)
4141
}
4242
actual = a.String()
4343
}()
@@ -57,15 +57,15 @@ func DiffCtx(ctx context.Context, input templ.Component, expected string) (forma
5757
var wg sync.WaitGroup
5858
wg.Add(2)
5959

60-
var errs []error
60+
errs := make([]error, 3)
6161

6262
// Format the expected value.
6363
go func() {
6464
defer wg.Done()
6565
e := new(strings.Builder)
6666
err := htmlformat.Fragment(e, strings.NewReader(expected))
6767
if err != nil {
68-
errs = append(errs, fmt.Errorf("expected html formatting error: %w", err))
68+
errs[0] = fmt.Errorf("expected html formatting error: %w", err)
6969
}
7070
expected = e.String()
7171
}()
@@ -77,14 +77,14 @@ func DiffCtx(ctx context.Context, input templ.Component, expected string) (forma
7777
defer wg.Done()
7878
err := htmlformat.Fragment(actual, r)
7979
if err != nil {
80-
errs = append(errs, fmt.Errorf("actual html formatting error: %w", err))
80+
errs[1] = fmt.Errorf("actual html formatting error: %w", err)
8181
}
8282
}()
8383

8484
// Render the component.
8585
err = input.Render(ctx, w)
8686
if err != nil {
87-
errs = append(errs, fmt.Errorf("failed to render component: %w", err))
87+
errs[2] = fmt.Errorf("failed to render component: %w", err)
8888
}
8989
w.Close()
9090

‎generator/test-css-middleware/render_test.go

+8-4
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package testcssmiddleware
22

33
import (
44
_ "embed"
5+
"errors"
56
"fmt"
67
"net/http/httptest"
78
"strings"
@@ -20,7 +21,7 @@ var expectedCSS = `.red_050e5e03{color:red;}
2021
`
2122

2223
func Test(t *testing.T) {
23-
var errs []error
24+
errs := make([]error, 3)
2425
var wg sync.WaitGroup
2526
wg.Add(3)
2627

@@ -30,7 +31,7 @@ func Test(t *testing.T) {
3031
e := new(strings.Builder)
3132
err := htmlformat.Fragment(e, strings.NewReader(expected))
3233
if err != nil {
33-
errs = append(errs, fmt.Errorf("expected html formatting error: %w", err))
34+
errs[0] = fmt.Errorf("expected html formatting error: %w", err)
3435
}
3536
expected = e.String()
3637
}()
@@ -50,7 +51,7 @@ func Test(t *testing.T) {
5051
a := new(strings.Builder)
5152
err := htmlformat.Fragment(a, w.Body)
5253
if err != nil {
53-
errs = append(errs, fmt.Errorf("actual html formatting error: %w", err))
54+
errs[1] = fmt.Errorf("actual html formatting error: %w", err)
5455
}
5556
actual = a.String()
5657
}()
@@ -65,13 +66,16 @@ func Test(t *testing.T) {
6566
a := new(strings.Builder)
6667
err := htmlformat.Fragment(a, w.Body)
6768
if err != nil {
68-
errs = append(errs, fmt.Errorf("actual html formatting error: %w", err))
69+
errs[2] = fmt.Errorf("actual html formatting error: %w", err)
6970
}
7071
actualCSS = a.String()
7172
}()
7273

7374
wg.Wait()
7475

76+
if err := errors.Join(errs...); err != nil {
77+
t.Error(err)
78+
}
7579
if diff := cmp.Diff(expected, actual); diff != "" {
7680
t.Error(diff)
7781
}

0 commit comments

Comments
 (0)
Please sign in to comment.