docs: @Override
      public void stop(int mode) {
          if (TraceComponent.isAnyTracingEnabled()
              && tc.isEntryEnabled())
              SibTr.entry(tc, "stop", new Integer(mode));
  
          try {
              // Check whether the stop is from COMMS server to stop MP
              // connection. In that case just call closeConnection and return
              if (mode == JsConstants.ME_STOP_COMMS_CONNECTIONS) {
                  if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
                      SibTr.debug(tc,
                                  "Stop request from Comms server for COMMS connections");
                  closeConnections(JsConstants.ME_STOP_QUIESCE,
                                   SIMPConstants.MP_VIACOMMS_CONNECTION);
                  return;
              }
  
              if (mode == JsConstants.ME_STOP_COMMS_SSL_CONNECTIONS) {
                  if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
                      SibTr.debug(tc,
                                  "Stop request from Comms server for COMMS SSL connections");
                  closeConnections(JsConstants.ME_STOP_QUIESCE,
                                   SIMPConstants.MP_VIACOMMSSSL_CONNECTION);
                  return;
              }
          } catch (Exception e) {
              //Absorb the exception and log in trace
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                  if (mode == JsConstants.ME_STOP_COMMS_CONNECTIONS)
                      SibTr.debug(tc, "Failure in closing COMMS connections", e);
                  else
                      SibTr.debug(tc, "Failure in closing COMMS over SSL connections", e);
  
              }
              return;
          }
  
          try {
              // Tell everything we control that MP is stopping now.
              announceMPStopping();
  
              // Block all new create Connection calls and all calls to
              // connection.close by obtaining the exclusive lock
              _connectionsLockManager.lockExclusive();
  
              synchronized (_mpStartStopLock) {
                  if (_starting) {
                      if (TraceComponent.isAnyTracingEnabled()
                          && tc.isDebugEnabled())
                          SibTr.debug(tc, "Stop waiting until start complete");
  
                      try {
                          _mpStartStopLock.wait();
                      } catch (InterruptedException e) {
                          // No FFDC code needed
                          if (TraceComponent
                                          .isAnyTracingEnabled()
                              && tc.isDebugEnabled())
                              SibTr.exception(tc, e);
                      }
                  }
  
                  if (!_started) {
                      if (TraceComponent.isAnyTracingEnabled()
                          && tc.isEntryEnabled())
                          SibTr.exit(tc, "stop", "Returning as not started.");
                      return;
                  }
  
                  _started = false;
  
                  // Stop the mpio to stop processing any more remote messages.
                  _mpio.stop();
  
                  // Stop all the threads that have been started
                  _stoppableThreadCache.stopAllThreads();
  
                  // Stop expiry first - while stopping we don't want any messages
                  // to
                  // expire.
                  _msgStore.expirerStop();
  
                  _msgStore.deliveryDelayManagerStop();
  
                  // If the destination manager was not found at startup, then
                  // this
                  // object will be null.
                  if (_destinationManager == null) {
                      if (TraceComponent.isAnyTracingEnabled()
                          && tc.isEntryEnabled())
                          SibTr.exit(tc, "stop", "Null DM");
                      return;
                  }
  
                  _destinationManager.stop(mode);
  
                  //close all in-process connections .
                  closeConnections(mode, SIMPConstants.MP_INPROCESS_CONNECTION);
  
                  // Stop the administrator
                  _administrator.stop();
  
                  // Tell MFP that the message store is about to be stopped.
                  SchemaStore.messageStoreStoppingNotify(_msgStore);
  
              } // end sync
          } finally {
              _connectionsLockManager.unlockExclusive();
              // _persistentStore=null is not needed as during reconstitute it is created from messagestore store as a fresh object.
              if (_consumerThreadPool != null) {
                  _consumerThreadPool.shutdownNow();
                  _consumerThreadPool = null;
              }
              if (_systemThreadPool != null) {
                  _systemThreadPool.shutdownNow();
                  _systemThreadPool = null;
              }
  
          }
  
          if (TraceComponent.isAnyTracingEnabled()
              && tc.isEntryEnabled())
              SibTr.exit(tc, "stop");
      }