docs: private void pauseConsumers(SIMPMessage msg, long retryInterval)
      {
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              SibTr.entry(tc, "pauseConsumers", new Object[] { msg, Long.valueOf(retryInterval) });
  
          // We need to lock the consumerPoints to check for consumers to pause but
          // we can't actually suspend them under that lock or we'll deadlock (465125)
          // so we build a new consumer list and process them outside the lock
          LinkedList<DispatchableKey> cachedConsumerPoints = new LinkedList<DispatchableKey>();
          synchronized (consumerPoints)
          {
              Iterator<DispatchableKey> itr = consumerPoints.iterator();
              while (itr.hasNext())
              {
                  DispatchableKey cKey = itr.next();
  
                  // If consumer is interested in this message, suspend it.
                  if (((LocalQPConsumerKey) cKey).filterMatches((AbstractItem) msg))
                  {
                      cachedConsumerPoints.add(cKey);
                  }
              }
          } // sync
  
          // Now pause the consumers outside the lock
          Iterator<DispatchableKey> itr2 = cachedConsumerPoints.iterator();
          while (itr2.hasNext())
          {
              DispatchableKey cKey = itr2.next();
  
              DispatchableConsumerPoint consumerPoint =
                              cKey.getConsumerPoint();
              // If this consumer is already suspended then don't sent up a new alarm and
              // don't resuspend the consumer
              BlockedConsumerRetryHandler blockedConsumerRetryHandler = new BlockedConsumerRetryHandler(consumerPoint);
              if (blockedConsumerRetryHandler.startSuspend())
              {
                  // Spin of a new alarm that will suspend the consumer immediately
                  //  then wake up and resume the consumer
                  _messageProcessor.getAlarmManager().
                                  create(retryInterval, blockedConsumerRetryHandler);
              }
          }
  
          // Spin of a new alarm that will mark the itemStream as blocked
          // and unblock it in time with the consumers. This allows us to
          // display the state via the MBeans/panels using the QueueMessage
          // objects
          _messageProcessor.getAlarmManager().create(retryInterval,
                                                     new BlockedRetryHandler());
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              SibTr.exit(tc, "pauseConsumers");
      }