Skip to content

Commit

Permalink
client/pkg/testutil: update interestingGoroutines
Browse files Browse the repository at this point in the history
The Go runtime uses runtime Finalizer to delete cert [[1]]. The
interestingGoroutines is able to collect stack like,

```plain
leak.go:103: Found leaked goroutined BEFORE test appears to have leaked :
        sync.(*Map).LoadAndDelete(0xc00031e180, {0xe07320, 0xc00009fde0})
                /usr/local/go/src/sync/map.go:272 +0x192
        sync.(*Map).Delete(...)
                /usr/local/go/src/sync/map.go:297
        crypto/tls.(*certCache).evict(...)
                /usr/local/go/src/crypto/tls/cache.go:73
        crypto/tls.(*certCache).active.func1(0x0?)
                /usr/local/go/src/crypto/tls/cache.go:65 +0x67
```

It's caused by GC instead of leaky goroutine. interestingGoroutines
should skip it.

Backport of etcd-io#18287

[1]: https://github.com/golang/go/blob/8e1fdea8316d840fd07e9d6e026048e53290948b/src/crypto/tls/cache.go#L63

Signed-off-by: Wei Fu <fuweid89@gmail.com>
  • Loading branch information
fuweid committed Aug 17, 2024
1 parent fa7ce71 commit fd735dd
Showing 1 changed file with 2 additions and 1 deletion.
3 changes: 2 additions & 1 deletion client/pkg/testutil/leak.go
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,8 @@ func interestingGoroutines() (gs []string) {
strings.Contains(stack, "runtime.MHeap_Scavenger") ||
strings.Contains(stack, "rcrypto/internal/boring.(*PublicKeyRSA).finalize") ||
strings.Contains(stack, "net.(*netFD).Close(") ||
strings.Contains(stack, "testing.(*T).Run") {
strings.Contains(stack, "testing.(*T).Run") ||
strings.Contains(stack, "crypto/tls.(*certCache).evict") {
continue
}
gs = append(gs, stack)
Expand Down

0 comments on commit fd735dd

Please sign in to comment.