// Copyright 2025 The Go Authors. All rights reserved. // Use of this source code is governed by a MIT // license that can be found in the LICENSE file. /* * Project: kubernetes * Issue or PR : https://github.com/kubernetes/kubernetes/pull/5316 * Buggy version: c868b0bbf09128960bc7c4ada1a77347a464d876 * fix commit-id: cc3a433a7abc89d2f766d4c87eaae9448e3dc091 * Flaky: 100/100 */ package main import ( "errors" "math/rand" "os" "runtime" "runtime/pprof" "time" ) func init() { register("Kubernetes5316", Kubernetes5316) } func finishRequest_kubernetes5316(timeout time.Duration, fn func() error) { ch := make(chan bool) errCh := make(chan error) go func() { // G2 if err := fn(); err != nil { errCh <- err } else { ch <- true } }() select { case <-ch: case <-errCh: case <-time.After(timeout): } } func Kubernetes5316() { prof := pprof.Lookup("goroutineleak") defer func() { // Wait a bit because the child goroutine relies on timed operations. time.Sleep(100 * time.Millisecond) // Yield several times to allow the child goroutine to run for i := 0; i < yieldCount; i++ { runtime.Gosched() } prof.WriteTo(os.Stdout, 2) }() go func() { fn := func() error { time.Sleep(2 * time.Millisecond) if rand.Intn(10) > 5 { return errors.New("Error") } return nil } go finishRequest_kubernetes5316(time.Microsecond, fn) // G1 }() }