blob: 72005cc844e2250ed729893ec2769d9d991c763c [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.
package main
import (
"os"
"runtime/pprof"
"sync"
"time"
)
func init() {
register("Grpc795", Grpc795)
}
type Server_grpc795 struct {
mu sync.Mutex
drain bool
}
func (s *Server_grpc795) GracefulStop() {
s.mu.Lock()
if s.drain {
s.mu.Lock()
return
}
s.drain = true
s.mu.Unlock()
}
func (s *Server_grpc795) Serve() {
s.mu.Lock()
s.mu.Unlock()
}
func NewServer_grpc795() *Server_grpc795 {
return &Server_grpc795{}
}
type test_grpc795 struct {
srv *Server_grpc795
}
func (te *test_grpc795) startServer() {
s := NewServer_grpc795()
te.srv = s
go s.Serve()
}
func newTest_grpc795() *test_grpc795 {
return &test_grpc795{}
}
func testServerGracefulStopIdempotent_grpc795() {
te := newTest_grpc795()
te.startServer()
for i := 0; i < 3; i++ {
te.srv.GracefulStop()
}
}
func Grpc795() {
prof := pprof.Lookup("goroutineleak")
defer func() {
time.Sleep(100 * time.Millisecond)
prof.WriteTo(os.Stdout, 2)
}()
for i := 0; i < 100; i++ {
go testServerGracefulStopIdempotent_grpc795()
}
}