docs: public void removeMember(JSConsumerKey key)
    {
      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
        SibTr.entry(tc, "removeMember", key);
  
      LocalQPConsumerKey anyKey = null;
  
      // We lock the CD so other members are not added/removed while
      // we do this
      synchronized(consumerDispatcher.getDestination().getReadyConsumerPointLock())
      {
        if(singleMember != null)
        {
          if(!(key.isSpecific()))
            generalMemberCount--;
  
          if(singleMember == key)
            singleMember = null;
          else
          {
            // We must be the only member
            if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) SibTr.exit(tc, "removeMember", "SIErrorException");
              throw new SIErrorException(
                nls.getFormattedMessage(
                  "INTERNAL_MESSAGING_ERROR_CWSIP0001",
                  new Object[] {
                    "com.ibm.ws.sib.processor.impl.LocalQPConsumerKeyGroup",
                    "1:453:1.6.1.14" },
                  null));
          }
        }
        else
        {
          if(key.isSpecific())
            specificKeyMembers.remove(key);
          else
          {
            generalKeyMembers.remove(key);
            generalMemberCount--;
            // As we've modified the list we need a new iterator
            generalMemberIndex = 0;
          }
        }
  
        memberCount--;
  
        // If that was the last member, we can remove this group
        if(memberCount == 0)
        {
          consumerDispatcher.removeKeyGroup(this);
          // Drive finished against the set of cursors
          
          if(classifyingMessages)
          {
            // Take the classifications read lock
            consumerSet.takeClassificationReadLock();
            
            int numFilters = consumerKeyFilter.length;    
            for(int i=0;i<numFilters;i++)
              consumerKeyFilter[i].detach(); 
  
            // Free the classifications read lock
            consumerSet.freeClassificationReadLock();          
          }
          else
          {
            consumerKeyFilter[0].detach();  
          }
        }
        // If all the remaining members are started we can start receiving
        // messages again (we couldn't have been before because the member
        // was in stopped state.
        else if(memberCount == startedCount)
        {
          if(generalMemberCount > 0)
            anyKey = generalKeyMembers.get(0);
          else
            anyKey = specificKeyMembers.get(0);
        }
      } // synchronized
  
      //  Start the member up
      if(anyKey!=null)
        anyKey.getConsumerPoint().checkForMessages();
  
      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
        SibTr.exit(tc, "removeMember");
    }