private void closeDeadProxies(List<CacheClientProxy> deadProxies, boolean stoppedNormally) {
    final boolean isDebugEnabled = logger.isDebugEnabled();
    for (CacheClientProxy deadProxy : deadProxies) {
      if (isDebugEnabled) {
        logger.debug("CacheClientNotifier: Closing dead client: {}", deadProxy);
      }

      // Close the proxy
      boolean keepProxy = false;
      try {
        keepProxy = deadProxy.close(false, stoppedNormally);
      } catch (CancelException e) {
        throw e;
      } catch (Exception e) {
        logger.warn("CacheClientNotifier: Caught exception attempting to close client: {}",
            deadProxy,
            e);
      }

      // Remove the proxy if necessary. It might not be necessary to remove the proxy if it is
      // durable.
      if (keepProxy) {
        logger.info(
            "CacheClientNotifier: Keeping proxy for durable client named {} for {} seconds {}.",
            deadProxy.getDurableId(), deadProxy.getDurableTimeout(), deadProxy);
      } else {
        closeAllClientCqs(deadProxy);
        if (isDebugEnabled) {
          logger.debug("CacheClientNotifier: Not keeping proxy for non-durable client: {}",
              deadProxy);
        }
        removeClientProxy(deadProxy);
      }
      deadProxy.notifyRemoval();
    } // for
  }
Close dead {@code CacheClientProxy} instances

@param deadProxies The list of {@code CacheClientProxy} instances to close
geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/CacheClientNotifier.java