docs: public void dereferenceSubscriptionConsumerDispatcher(
                                                            ConsumerDispatcher cd,
                                                            boolean isNonDurable,
                                                            boolean callProxyCode)
                      throws SIResourceException
      {
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              SibTr.entry(
                          tc,
                          "dereferenceSubscriptionConsumerDispatcher",
                          new Object[] {
                                        cd,
                                        new Boolean(isNonDurable),
                                        new Boolean(callProxyCode) });
  
          try
          {
              _subscriptionIndex.remove(cd);
  
              // Remove all entries for the consumerDispatcher from the matchspace
  
              SelectionCriteria[] selCriteria = cd.getConsumerDispatcherState().getSelectionCriteriaList();
  
              if (selCriteria != null)
              {
                  for (int i = 0; i < selCriteria.length; i++)
                  {
                      // Remove the CD from the MatchSpace
                      _messageProcessor
                                      .getMessageProcessorMatching()
                                      .removeConsumerDispatcherMatchTarget(cd, selCriteria[i]);
                  }
              }
  
              // 166833.2
              // Calls to the proxy code only need to occur on a non durable delete
              // subscription, or a createDurableSubscription rolled back.
              // It won't be called in the case that a durableSubscription.
              // eventCommittedRemove as the proxy message will have already been sent.
  
              //716917
              //isNonDurable was passed insted of callProxyCode
              //Due to which always false was being passed when we had durable subscriber, hence
              //the unsubscribe events was not being sent to neighbouring ME's when durable subscriber was unsubscribed
              //Its an Fix to 166833.2
  //    sanjay liberty change
  //      if (callProxyCode)
  //        _messageProcessor.getProxyHandler().unsubscribeEvent(
  //          cd.getConsumerDispatcherState(),
  //          null,
  //          callProxyCode);
  //
  //      // 175488
              if (isNonDurable)
              {
                  // Need to attempt cleanup of the subscription.  If it cant be completed
                  // now, it will be attempted by the asynch-deletion thread at a later
                  // time.
  
                  try
                  {
                      //remove the CD from ME wide hash map maintained for non durable shared consumers in Destination Manager.
                      // All non-durable shared consumer's subscriberID do not start with _NON_DURABLE_NON_SHARED
                      if (!(cd.getConsumerDispatcherState().getSubscriberID().contains("_NON_DURABLE_NON_SHARED")))
                          _destinationManager.getNondurableSharedSubscriptions().remove(cd.getConsumerDispatcherState().getSubscriberID());
                      // Find the subscription in the topicspace itemstream
                      final SubscriptionItemStream subscription =
                                      (
                                      SubscriptionItemStream) _pubsubMessageItemStream
                                                      .findFirstMatchingReferenceStream(
                                                      new SubscriptionFilter(cd));
  
                      // Remove any items on the subscription reference stream, and remove the stream itself
                      if (subscription != null)
                      {
                          //Mark the subscription as requiring deletion
                          subscription.markAsToBeDeleted();
  
                          //Drive the deletion of the subscription now.  It may not be possible to
                          //complete it now if there are indoubt messages on the subscription, in
                          //which case the commit/backout of those messages will drive the delete.
                          subscription.deleteIfPossible(true);
                      }
                  } catch (MessageStoreException e)
                  {
                      FFDCFilter.processException(
                                                  e,
                                                  "com.ibm.ws.sib.processor.impl.destination.PubSubRealization.dereferenceSubscriptionConsumerDispatcher",
                                                  "1:1835:1.35.2.4",
                                                  this);
  
                      SibTr.exception(tc, e);
                      SibTr.error(
                                  tc,
                                  "INTERNAL_MESSAGING_ERROR_CWSIP0003",
                                  new Object[] {
                                                "com.ibm.ws.sib.processor.impl.destination.PubSubRealization",
                                                "1:1844:1.35.2.4",
                                                e,
                                                cd.getConsumerDispatcherState().getSubscriberID() });
  
                      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
                          SibTr.exit(tc, "dereferenceSubscriptionConsumerDispatcher");
  
                      throw new SIResourceException(
                                      nls.getFormattedMessage(
                                                              "INTERNAL_MESSAGING_ERROR_CWSIP0003",
                                                              new Object[] {
                                                                            "com.ibm.ws.sib.processor.impl.destination.PubSubRealization",
                                                                            "1:1856:1.35.2.4",
                                                                            e,
                                                                            cd.getConsumerDispatcherState().getSubscriberID() },
                                                              null),
                                      e);
                  }
              } // end of 175488
          } catch (SIException e)
          {
              // Exceptions should not be thrown by proxy handler code
              FFDCFilter.processException(
                                          e,
                                          "com.ibm.ws.sib.processor.impl.destination.PubSubRealization.dereferenceSubscriptionConsumerDispatcher",
                                          "1:1869:1.35.2.4",
                                          this);
  
              SibTr.exception(tc, e);
              SibTr.error(
                          tc,
                          "INTERNAL_MESSAGING_ERROR_CWSIP0003",
                          new Object[] {
                                        "com.ibm.ws.sib.processor.impl.destination.PubSubRealization",
                                        "1:1878:1.35.2.4",
                                        e,
                                        cd.getConsumerDispatcherState().getSubscriberID() });
  
              if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
                  SibTr.exit(tc, "dereferenceSubscriptionConsumerDispatcher");
  
              throw new SIResourceException(
                              nls.getFormattedMessage(
                                                      "INTERNAL_MESSAGING_ERROR_CWSIP0003",
                                                      new Object[] {
                                                                    "com.ibm.ws.sib.processor.impl.destination.PubSubRealization",
                                                                    "1:1890:1.35.2.4",
                                                                    e,
                                                                    cd.getConsumerDispatcherState().getSubscriberID() },
                                                      null),
                              e);
          }
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              SibTr.exit(tc, "dereferenceSubscriptionConsumerDispatcher");
      }