// 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" "runtime/pprof" "sync" ) func init() { register("Syncthing5795", Syncthing5795) } type message_syncthing5795 interface{} type ClusterConfig_syncthing5795 struct{} type Model_syncthing5795 interface { ClusterConfig(message_syncthing5795) } type TestModel_syncthing5795 struct { ccFn func() } func (t *TestModel_syncthing5795) ClusterConfig(msg message_syncthing5795) { if t.ccFn != nil { t.ccFn() } } type Connection_syncthing5795 interface { Start() Close() } type rawConnection_syncthing5795 struct { receiver Model_syncthing5795 inbox chan message_syncthing5795 dispatcherLoopStopped chan struct{} closed chan struct{} closeOnce sync.Once } func (c *rawConnection_syncthing5795) Start() { go c.dispatcherLoop() // G2 } func (c *rawConnection_syncthing5795) dispatcherLoop() { defer close(c.dispatcherLoopStopped) var msg message_syncthing5795 for { select { case msg = <-c.inbox: case <-c.closed: return } switch msg := msg.(type) { case *ClusterConfig_syncthing5795: c.receiver.ClusterConfig(msg) default: return } } } func (c *rawConnection_syncthing5795) Close() { c.closeOnce.Do(func() { close(c.closed) <-c.dispatcherLoopStopped }) } func Syncthing5795() { prof := pprof.Lookup("goroutineleak") defer func() { // 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() { // G1 m := &TestModel_syncthing5795{} c := &rawConnection_syncthing5795{ dispatcherLoopStopped: make(chan struct{}), closed: make(chan struct{}), inbox: make(chan message_syncthing5795), receiver: m, } m.ccFn = c.Close c.Start() c.inbox <- &ClusterConfig_syncthing5795{} <-c.dispatcherLoopStopped }() }