Skip to content

Commit 14469c4

Browse files
authored
Merge pull request kubernetes-csi#907 from andyzhangx/fix-goroutine-leak
fix: goroutine leak when timeout
2 parents ead2fce + c9e5592 commit 14469c4

18 files changed

+1064
-3
lines changed

go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ require (
99
github.com/onsi/gomega v1.37.0
1010
github.com/pborman/uuid v1.2.1
1111
github.com/stretchr/testify v1.10.0
12+
go.uber.org/goleak v1.3.0
1213
golang.org/x/net v0.39.0
1314
google.golang.org/grpc v1.72.0
1415
google.golang.org/protobuf v1.36.6

pkg/nfs/utils.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -272,7 +272,7 @@ type TimeoutFunc func() (err error)
272272
// WaitUntilTimeout waits for the exec function to complete or return timeout error
273273
func WaitUntilTimeout(timeout time.Duration, execFunc ExecFunc, timeoutFunc TimeoutFunc) error {
274274
// Create a channel to receive the result of the exec function
275-
done := make(chan bool)
275+
done := make(chan bool, 1)
276276
var err error
277277

278278
// Start the exec function in a goroutine

pkg/nfs/utils_test.go

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ import (
2323
"strings"
2424
"testing"
2525
"time"
26+
27+
"go.uber.org/goleak"
2628
)
2729

2830
var (
@@ -449,6 +451,7 @@ func TestRemoveEmptyDirs(t *testing.T) {
449451
}
450452

451453
func TestWaitUntilTimeout(t *testing.T) {
454+
defer goleak.VerifyNone(t)
452455
tests := []struct {
453456
desc string
454457
timeout time.Duration
@@ -494,8 +497,11 @@ func TestWaitUntilTimeout(t *testing.T) {
494497

495498
for _, test := range tests {
496499
err := WaitUntilTimeout(test.timeout, test.execFunc, test.timeoutFunc)
497-
if err != nil && (err.Error() != test.expectedErr.Error()) {
498-
t.Errorf("unexpected error: %v, expected error: %v", err, test.expectedErr)
500+
if err != nil {
501+
time.Sleep(2 * time.Second)
502+
if err.Error() != test.expectedErr.Error() {
503+
t.Errorf("unexpected error: %v, expected error: %v", err, test.expectedErr)
504+
}
499505
}
500506
}
501507
}

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.

vendor/go.uber.org/goleak/internal/stack/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)