github.com/pf-qiu/concourse/v6@v6.7.3-0.20201207032516-1f455d73275f/worker/counting_wait_group.go (about)

     1  package worker
     2  
     3  import "sync"
     4  
     5  type countingWaitGroup struct {
     6  	sync.WaitGroup
     7  
     8  	countMutex sync.Mutex
     9  	count      int
    10  }
    11  
    12  func (cwg *countingWaitGroup) Add(n int) {
    13  	cwg.countMutex.Lock()
    14  	cwg.WaitGroup.Add(n)
    15  	cwg.count += n
    16  	cwg.countMutex.Unlock()
    17  }
    18  
    19  func (cwg *countingWaitGroup) Done() {
    20  	cwg.countMutex.Lock()
    21  	cwg.WaitGroup.Done()
    22  	cwg.count--
    23  	cwg.countMutex.Unlock()
    24  }
    25  
    26  func (cwg *countingWaitGroup) Count() int {
    27  	cwg.countMutex.Lock()
    28  	count := cwg.count
    29  	cwg.countMutex.Unlock()
    30  	return count
    31  }