diff --git a/src/main/java/net/openhft/chronicle/map/ChronicleMapCloseOnExitHook.java b/src/main/java/net/openhft/chronicle/hash/impl/ChronicleHashCloseOnExitHook.java
similarity index 80%
rename from src/main/java/net/openhft/chronicle/map/ChronicleMapCloseOnExitHook.java
rename to src/main/java/net/openhft/chronicle/hash/impl/ChronicleHashCloseOnExitHook.java
index cff5813f7..8b730f493 100644
--- a/src/main/java/net/openhft/chronicle/map/ChronicleMapCloseOnExitHook.java
+++ b/src/main/java/net/openhft/chronicle/hash/impl/ChronicleHashCloseOnExitHook.java
@@ -14,18 +14,17 @@
* along with this program. If not, see .
*/
-package net.openhft.chronicle.map;
+package net.openhft.chronicle.hash.impl;
-import net.openhft.chronicle.hash.impl.VanillaChronicleHash;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.TreeMap;
import java.util.WeakHashMap;
-final class ChronicleMapCloseOnExitHook {
- private static final Logger LOG = LoggerFactory.getLogger(ChronicleMapCloseOnExitHook.class);
+final class ChronicleHashCloseOnExitHook {
+ private static final Logger LOG = LoggerFactory.getLogger(ChronicleHashCloseOnExitHook.class);
private static WeakHashMap maps = new WeakHashMap<>();
private static long order = 0;
@@ -45,12 +44,18 @@ final class ChronicleMapCloseOnExitHook {
maps.put(hash.identity, order++);
}
+ static synchronized void remove(VanillaChronicleHash hash) {
+ if (maps == null)
+ return; // we are already in shutdown
+ maps.remove(hash.identity);
+ }
+
private static void closeAll() {
try {
WeakHashMap maps;
- synchronized (ChronicleMapCloseOnExitHook.class) {
- maps = ChronicleMapCloseOnExitHook.maps;
- ChronicleMapCloseOnExitHook.maps = null;
+ synchronized (ChronicleHashCloseOnExitHook.class) {
+ maps = ChronicleHashCloseOnExitHook.maps;
+ ChronicleHashCloseOnExitHook.maps = null;
}
TreeMap orderedMaps = new TreeMap<>();
@@ -69,5 +74,5 @@ final class ChronicleMapCloseOnExitHook {
}
}
- private ChronicleMapCloseOnExitHook() {}
+ private ChronicleHashCloseOnExitHook() {}
}
diff --git a/src/main/java/net/openhft/chronicle/hash/impl/VanillaChronicleHash.java b/src/main/java/net/openhft/chronicle/hash/impl/VanillaChronicleHash.java
index 8f0ca78eb..899db8da0 100644
--- a/src/main/java/net/openhft/chronicle/hash/impl/VanillaChronicleHash.java
+++ b/src/main/java/net/openhft/chronicle/hash/impl/VanillaChronicleHash.java
@@ -164,9 +164,8 @@ public abstract class VanillaChronicleHash> allContexts;
/**
- * {@link net.openhft.chronicle.map.ChronicleMapCloseOnExitHook} needs to use
- * {@code VanillaChronicleHash}es as WeakHashMap keys, but with identity comparison, not Map's
- * equals() and hashCode().
+ * {@link ChronicleHashCloseOnExitHook} needs to use {@code VanillaChronicleHash}es as
+ * WeakHashMap keys, but with identity comparison, not Map's equals() and hashCode().
*/
public class Identity {
public VanillaChronicleHash hash() {
@@ -489,6 +488,10 @@ public abstract class VanillaChronicleHash implements
map.registerCleaner();
// Ensure safe publication of a ChronicleMap
OS.memory().storeFence();
- ChronicleMapCloseOnExitHook.add(map);
+ map.addToOnExitHook();
}
/**