1
2
3
4
5
12 package main
13
14 import (
15 "os"
16 "runtime/pprof"
17 "sync"
18 "time"
19 )
20
21 func init() {
22 register("Etcd6873", Etcd6873)
23 }
24
25 type watchBroadcast_etcd6873 struct{}
26
27 type watchBroadcasts_etcd6873 struct {
28 mu sync.Mutex
29 updatec chan *watchBroadcast_etcd6873
30 donec chan struct{}
31 }
32
33 func newWatchBroadcasts_etcd6873() *watchBroadcasts_etcd6873 {
34 wbs := &watchBroadcasts_etcd6873{
35 updatec: make(chan *watchBroadcast_etcd6873, 1),
36 donec: make(chan struct{}),
37 }
38 go func() {
39 defer close(wbs.donec)
40 for wb := range wbs.updatec {
41 wbs.coalesce(wb)
42 }
43 }()
44 return wbs
45 }
46
47 func (wbs *watchBroadcasts_etcd6873) coalesce(wb *watchBroadcast_etcd6873) {
48 wbs.mu.Lock()
49 wbs.mu.Unlock()
50 }
51
52 func (wbs *watchBroadcasts_etcd6873) stop() {
53 wbs.mu.Lock()
54 defer wbs.mu.Unlock()
55 close(wbs.updatec)
56 <-wbs.donec
57 }
58
59 func (wbs *watchBroadcasts_etcd6873) update(wb *watchBroadcast_etcd6873) {
60 select {
61 case wbs.updatec <- wb:
62 default:
63 }
64 }
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84 func Etcd6873() {
85 prof := pprof.Lookup("goroutineleak")
86 defer func() {
87 time.Sleep(100 * time.Millisecond)
88 prof.WriteTo(os.Stdout, 2)
89 }()
90
91 for i := 0; i < 100; i++ {
92 go func() {
93 wbs := newWatchBroadcasts_etcd6873()
94 wbs.update(&watchBroadcast_etcd6873{})
95 go wbs.stop()
96 }()
97 }
98 }
99
View as plain text