code: func (s *Serf) checkQueueDepth(name string, queue *memberlist.TransmitLimitedQueue) {
  	for {
  		select {
  		case <-time.After(s.config.QueueCheckInterval):
  			numq := queue.NumQueued()
  			metrics.AddSample([]string{"serf", "queue", name}, float32(numq))
  			if numq >= s.config.QueueDepthWarning {
  				s.logger.Printf("[WARN] serf: %s queue depth: %d", name, numq)
  			}
  			if max := s.getQueueMax(); numq > max {
  				s.logger.Printf("[WARN] serf: %s queue depth (%d) exceeds limit (%d), dropping messages!",
  					name, numq, max)
  				queue.Prune(max)
  			}
  		case <-s.shutdownCh:
  			return
  		}
  	}
  }
docs: // checkQueueDepth periodically checks the size of a queue to see if
  // it is too large