code: func (l *Lock) SetMax(max int) (sem *Semaphore, oldMax int, err error) {
  	var (
  		semRet *Semaphore
  		old    int
  	)
  
  	return semRet, old, l.store(func(sem *Semaphore) error {
  		old = sem.Max
  		semRet = sem
  		return sem.SetMax(max)
  	})
  }
docs: // SetMax sets the maximum number of holders the semaphore will allow
  // it returns the current semaphore and the previous maximum
  // if there is a problem getting or setting the semaphore, this function will
  // pass on errors from the underlying client