docs: public long waiting(long timeout, boolean modifyTimeout)
    {
      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
        SibTr.entry(this, tc, "waiting", new Object[]{Long.valueOf(timeout), Boolean.valueOf(modifyTimeout)});
  
      // Of the timout values returned to us by each queue point return the longest to our caller
      long rc = timeout;
  
      Iterator<ConsumableKey> it = null;
      synchronized(this)
      {
        it = ((HashMap<SIBUuid8,ConsumableKey>)consumerKeys.clone()).values().iterator();
        
        // If an ME in the cluster was unavailable when this request was made, we
        // need to remember the request timeout in order to forward a request on
        // when the ME appears (unless the request time has expired).
        // Therefore we update the longestRequestTime that occurred while the ME was
        // away.
        if (timeout == LocalConsumerPoint.INFINITE_WAIT)
          outstandingRequestExpiryTime = timeout;
        else if (timeout != LocalConsumerPoint.NO_WAIT)
        {
          // Work out when this request would have expired
          long expiryTime = System.currentTimeMillis() + timeout;
          
          // If we dont have a current refillTime that extends to the period of this request
          // then set the new refillTime
          if (outstandingRequestExpiryTime != LocalConsumerPoint.INFINITE_WAIT && outstandingRequestExpiryTime < expiryTime)
            outstandingRequestExpiryTime = expiryTime;
        }
      }
      
      // We dont want to hold the gathering consumer key lock while we call waiting as
      // this creates contention betwen the sending and receiving threads.
      // E.g A receive can deadlock with a RCD.resolve with the gck/streamStatus locks.
      while (it.hasNext()) 
      {
        final LocalQPConsumerKey key = (LocalQPConsumerKey)it.next();
        if (key.isRefillAllowed())
        {
          // Iterate over all our keys. If we are in the process of refilling or have
          // decided we need to refill, then allow waiting to be called so we can 
          // either issue a get or register our interest in a msg for when the current get expires.
          final long to = key.waiting(timeout, modifyTimeout);
          if (to > rc) rc = to;
        }
      }
      
      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
        SibTr.exit(this, tc, "waiting", rc);
  
      return rc;
    }