GEODE-7159: Amending emergencyClose to type check before casting. Also included Optional instead of null checks (#4493)


(cherry picked from commit 0f05e9ccd94c04a205ace82de6616e9bffa92fa7)
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/PoolManagerImpl.java b/geode-core/src/main/java/org/apache/geode/internal/cache/PoolManagerImpl.java
index 1d6f2f8..67488ee 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/PoolManagerImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/PoolManagerImpl.java
@@ -20,6 +20,7 @@
 import java.util.Iterator;
 import java.util.Map;
 import java.util.Map.Entry;
+import java.util.Optional;
 
 import org.apache.logging.log4j.Logger;
 
@@ -63,7 +64,7 @@
   }
 
   private volatile Map<String, Pool> pools = Collections.emptyMap();
-  private volatile Iterator<Map.Entry<String, Pool>> itrForEmergencyClose = null;
+  private volatile Optional<Iterator<Pool>> itrForEmergencyClose = Optional.empty();
   private final Object poolLock = new Object();
   /**
    * True if this manager is a normal one owned by the PoolManager. False if this is a special one
@@ -123,7 +124,7 @@
 
       }
       pools = Collections.emptyMap();
-      itrForEmergencyClose = null;
+      itrForEmergencyClose = Optional.empty();
       if (foundClientPool) {
         // Now that the client has all the pools destroyed free up the pooled comm buffers
         ServerConnection.emptyCommBufferPool();
@@ -159,7 +160,7 @@
       // + " and more than one pool already exists in client.");
       // }
       pools = Collections.unmodifiableMap(copy);
-      itrForEmergencyClose = copy.entrySet().iterator();
+      itrForEmergencyClose = Optional.of(copy.values().iterator());
     }
   }
 
@@ -188,7 +189,7 @@
         return false;
       } else {
         pools = Collections.unmodifiableMap(copy);
-        itrForEmergencyClose = copy.entrySet().iterator();
+        itrForEmergencyClose = Optional.of(copy.values().iterator());
         return true;
       }
     }
@@ -289,14 +290,14 @@
     if (impl == null) {
       return;
     }
-    Iterator<Map.Entry<String, Pool>> itr = impl.itrForEmergencyClose;
-    if (itr == null) {
-      return;
-    }
-    while (itr.hasNext()) {
-      Entry<String, Pool> next = itr.next();
-      ((PoolImpl) next.getValue()).emergencyClose();
-    }
+    impl.itrForEmergencyClose.ifPresent(poolIterator -> {
+      while (poolIterator.hasNext()) {
+        Pool pool = poolIterator.next();
+        if (pool instanceof PoolImpl) {
+          ((PoolImpl) pool).emergencyClose();
+        }
+      }
+    });
   }
 
   public static void loadEmergencyClasses() {