docs: public void deleteDestination(DestinationHandler destinationHandler) throws SINotPossibleInCurrentConfigurationException, SIResourceException
    {
  
      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
        SibTr.entry(tc, "deleteDestination", destinationHandler);
  
      //The lock on the destinationManager is taken to stop 2 threads creating the same
      //destination and also to synchronize dynamic deletes with the 
      //creation of aliases.  This stops an alias destination being created that targets a
      //destination in the process of being deleted.
      synchronized(_destinationManager) // Lock1
      {
        // We need to match the locking hierarchy in DestinationManager.deleteDestinationLocalization
        Object objLock = new Object();
        synchronized (objLock) // Lock2
        {
          synchronized (destinationHandler) // Lock3
          {
            if ((destinationHandler.isToBeDeleted() ||
                (destinationHandler.isDeleted())))
            {
              // Treat as if the destination does not exist.  
              if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
                SibTr.exit(
                  tc,
                  "deleteDestination",
                  "Destination to be deleted");
      
              throw new SINotPossibleInCurrentConfigurationException(
                nls_cwsik.getFormattedMessage(
                  "DESTINATION_DELETE_ERROR_CWSIP0331",  
                  new Object[] { destinationHandler.getName(), _messageProcessor.getMessagingEngineName() }, null));
            }
      
            if ((!destinationHandler.isAlias()) && ((!destinationHandler.isForeign())))
            {
              // Set the deletion flag in the DH persistently.
              ExternalAutoCommitTransaction transaction = _messageProcessor.getTXManager().createAutoCommitTransaction();
      
              BaseDestinationHandler baseDestinationHandler = (BaseDestinationHandler) destinationHandler;
              baseDestinationHandler.setToBeDeleted(true);
              _destinationIndex.delete(destinationHandler);
              try
              {
                baseDestinationHandler.requestUpdate(transaction);
              }
              catch (MessageStoreException e)
              {
                // MessageStoreException shouldn't occur so FFDC.
                FFDCFilter.processException(
                  e,
                  "com.ibm.ws.sib.processor.impl.DynamicConfigManager.deleteDestination",
                  "1:464:1.32",
                  this);
      
                SibTr.exception(tc, e);
                if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
                  SibTr.exit(tc, "deleteDestination", "SIResourceException");
                throw new SIResourceException(e);
              }
            }
            else
            {
              //Mark the alias/foreign destination as deleted.
              destinationHandler.setDeleted();
            }
              
            // Close all connections to the destination
            destinationHandler.closeProducers();
            destinationHandler.closeConsumers();
            
            //Delete any aliases that target this destination
            destinationHandler.deleteTargettingAliases();
      
            if ((!destinationHandler.isAlias()) && ((!destinationHandler.isForeign())))
            {
              // Update the set of localising messaging engines for the destinationHandler
              BaseDestinationHandler bdh = (BaseDestinationHandler)destinationHandler;
      
              //Add all the localisations to the set of those requiring clean-up
              bdh.addAllLocalisationsForCleanUp();
      
              //Clear the set of ME's that localise the destination
              bdh.clearLocalisingUuidsSet();
      
              //Enqueue the destination for deletion
              _destinationManager.startAsynchDeletion();
            }
            else
            {
              AbstractAliasDestinationHandler abstractAliasDestinationHandler = 
                (AbstractAliasDestinationHandler) destinationHandler;
                
              //Delete the alias/foreign destination handler
              deleteAbstractAliasDestinationHandler(abstractAliasDestinationHandler);
      
              //Tell the alias about the delete so it can remove the reference
              //to itself from its target
              abstractAliasDestinationHandler.delete();
      
            }
          } // Lock3
        } // Lock2
      } // Lock1
      
      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
        SibTr.exit(tc, "deleteDestination");
  
      return;
    }