blob: 212f65b1f3f2c60f8fa08b7799f8115948187601 [file] [log] [blame] [edit]
// 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: moby
* Issue or PR : https://github.com/moby/moby/pull/7559
* Buggy version: 64579f51fcb439c36377c0068ccc9a007b368b5a
* fix commit-id: 6cbb8e070d6c3a66bf48fbe5cbf689557eee23db
* Flaky: 100/100
*/
package main
import (
"net"
"os"
"runtime/pprof"
"sync"
"time"
)
func init() {
register("Moby7559", Moby7559)
}
type UDPProxy_moby7559 struct {
connTrackLock sync.Mutex
}
func (proxy *UDPProxy_moby7559) Run() {
for i := 0; i < 2; i++ {
proxy.connTrackLock.Lock()
_, err := net.DialUDP("udp", nil, nil)
if err != nil {
continue
/// Missing unlock here
}
if i == 0 {
break
}
}
proxy.connTrackLock.Unlock()
}
func Moby7559() {
prof := pprof.Lookup("goroutineleak")
defer func() {
time.Sleep(100 * time.Millisecond)
prof.WriteTo(os.Stdout, 2)
}()
for i := 0; i < 20; i++ {
go (&UDPProxy_moby7559{}).Run()
}
}