@Override
  public boolean requestMemberRemoval(ID mbr, String reason) throws MemberDisconnectedException {
    if (mbr.equals(address)) {
      return false;
    }
    logger.warn("Membership: requesting removal of {}. Reason={}",
        new Object[] {mbr, reason});
    try {
      services.getJoinLeave().remove(mbr, reason);
    } catch (RuntimeException e) {
      RuntimeException problem = e;
      if (services.getShutdownCause() != null) {
        Throwable cause = services.getShutdownCause();
        // If ForcedDisconnectException occurred then report it as actual
        // problem.
        if ((cause instanceof MemberDisconnectedException)) {
          throw (MemberDisconnectedException) cause;
        } else {
          Throwable ne = problem;
          while (ne.getCause() != null) {
            ne = ne.getCause();
          }
          try {
            ne.initCause(services.getShutdownCause());
          } catch (IllegalArgumentException selfCausation) {
            // fix for bug 38895 - the cause is already in place
          }
        }
      }
      listener.saveConfig();

      listener.membershipFailure("Channel closed", problem);
      throw new MembershipClosedException("Channel closed", problem);
    }
    return true;
  }
in order to avoid split-brain occurring when a member is shutting down due to race conditions
in view management we add it as a shutdown member when we receive a shutdown message. This is
not the same as a SHUNNED member.
geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/GMSMembership.java