go-micro.dev/v5@v5.12.0/server/rpc_util.go (about) 1 package server 2 3 import ( 4 "sync" 5 ) 6 7 // waitgroup for global management of connections. 8 type waitGroup struct { 9 // global waitgroup 10 gg *sync.WaitGroup 11 // local waitgroup 12 lg sync.WaitGroup 13 } 14 15 // NewWaitGroup returns a new double waitgroup for global management of processes. 16 func NewWaitGroup(gWg *sync.WaitGroup) *waitGroup { 17 return &waitGroup{ 18 gg: gWg, 19 } 20 } 21 22 func (w *waitGroup) Add(i int) { 23 w.lg.Add(i) 24 if w.gg != nil { 25 w.gg.Add(i) 26 } 27 } 28 29 func (w *waitGroup) Done() { 30 w.lg.Done() 31 if w.gg != nil { 32 w.gg.Done() 33 } 34 } 35 36 func (w *waitGroup) Wait() { 37 // only wait on local group 38 w.lg.Wait() 39 }