Skip to content

Commit 7b23ca3

Browse files
authored
Merge pull request #947 from andyzhangx/fix-goroutine-leak
fix: goroutine leak when timeout
2 parents 887341d + 85694b7 commit 7b23ca3

File tree

18 files changed

+1064
-3
lines changed

18 files changed

+1064
-3
lines changed

go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ require (
1818
github.com/pborman/uuid v1.2.1
1919
github.com/pelletier/go-toml v1.7.0
2020
github.com/stretchr/testify v1.9.0
21+
go.uber.org/goleak v1.3.0
2122
golang.org/x/net v0.39.0
2223
google.golang.org/grpc v1.65.0
2324
k8s.io/api v0.29.14

pkg/util/util.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ type TimeoutFunc func() (err error)
3939
// WaitUntilTimeout waits for the exec function to complete or return timeout error
4040
func WaitUntilTimeout(timeout time.Duration, execFunc ExecFunc, timeoutFunc TimeoutFunc) error {
4141
// Create a channel to receive the result of the exec function
42-
done := make(chan bool)
42+
done := make(chan bool, 1)
4343
var err error
4444

4545
// Start the exec function in a goroutine

pkg/util/util_test.go

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,12 @@ import (
2121
"reflect"
2222
"testing"
2323
"time"
24+
25+
"go.uber.org/goleak"
2426
)
2527

2628
func TestWaitUntilTimeout(t *testing.T) {
29+
defer goleak.VerifyNone(t)
2730
tests := []struct {
2831
desc string
2932
timeout time.Duration
@@ -69,8 +72,11 @@ func TestWaitUntilTimeout(t *testing.T) {
6972

7073
for _, test := range tests {
7174
err := WaitUntilTimeout(test.timeout, test.execFunc, test.timeoutFunc)
72-
if err != nil && (err.Error() != test.expectedErr.Error()) {
73-
t.Errorf("unexpected error: %v, expected error: %v", err, test.expectedErr)
75+
if err != nil {
76+
time.Sleep(2 * time.Second)
77+
if err.Error() != test.expectedErr.Error() {
78+
t.Errorf("unexpected error: %v, expected error: %v", err, test.expectedErr)
79+
}
7480
}
7581
}
7682
}

vendor/go.uber.org/goleak/.gitignore

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/go.uber.org/goleak/.golangci.yml

Lines changed: 28 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/go.uber.org/goleak/CHANGELOG.md

Lines changed: 74 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/go.uber.org/goleak/LICENSE

Lines changed: 21 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/go.uber.org/goleak/Makefile

Lines changed: 45 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/go.uber.org/goleak/README.md

Lines changed: 74 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/go.uber.org/goleak/doc.go

Lines changed: 22 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)