code: func (s *Semaphore) pruneDeadHolders(lock *semaphoreLock, pairs KVPairs) {
  	// Gather all the live holders
  	alive := make(map[string]struct{}, len(pairs))
  	for _, pair := range pairs {
  		if pair.Session != "" {
  			alive[pair.Session] = struct{}{}
  		}
  	}
  
  	// Remove any holders that are dead
  	for holder := range lock.Holders {
  		if _, ok := alive[holder]; !ok {
  			delete(lock.Holders, holder)
  		}
  	}
  }
docs: // pruneDeadHolders is used to remove all the dead lock holders