code: func (wc *watchChan) processEvent(wg *sync.WaitGroup) {
  	defer wg.Done()
  
  	for {
  		select {
  		case e := <-wc.incomingEventChan:
  			res := wc.transform(e)
  			if res == nil {
  				continue
  			}
  			if len(wc.resultChan) == outgoingBufSize {
  				klog.V(3).Infof("Fast watcher, slow processing. Number of buffered events: %d."+
  					"Probably caused by slow dispatching events to watchers", outgoingBufSize)
  			}
  			// If user couldn't receive results fast enough, we also block incoming events from watcher.
  			// Because storing events in local will cause more memory usage.
  			// The worst case would be closing the fast watcher.
  			select {
  			case wc.resultChan <- *res:
  			case <-wc.ctx.Done():
  				return
  			}
  		case <-wc.ctx.Done():
  			return
  		}
  	}
  }
docs: // processEvent processes events from etcd watcher and sends results to resultChan.