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  }