code: func (rw *BoundedRWLock) RLock(timeout time.Duration) (err error) {
  	deadline := time.After(timeout)
  	rw.control.Lock()
  	if rw.nextWriter != nil {
  		me := newWait(false)
  		select {
  		case rw.waiters <- me:
  		default:
  			err = errors.New("Waiter capacity reached in RLock")
  		}
  		rw.control.Unlock()
  		if err != nil {
  			return
  		}
  
  		woken := me.WaitAtomic(deadline)
  		if !woken {
  			return errors.New("Waiter timeout")
  		}
  	} else {
  		rw.readers++
  		rw.control.Unlock()
  	}
  	return
  }
docs: // Wait for a read lock for up to 'timeout'.
  //
  // Error will be non-nil on timeout or when the wait list is at capacity.