diff --git a/src/main/java/net/openhft/chronicle/bytes/DistributedUniqueTimeProvider.java b/src/main/java/net/openhft/chronicle/bytes/DistributedUniqueTimeProvider.java index 2d75ea64a7c..826174235b1 100644 --- a/src/main/java/net/openhft/chronicle/bytes/DistributedUniqueTimeProvider.java +++ b/src/main/java/net/openhft/chronicle/bytes/DistributedUniqueTimeProvider.java @@ -40,7 +40,7 @@ * The class uses a file-based mechanism to ensure that timestamps are not only unique across restarts * but also across different JVM instances. */ -public class DistributedUniqueTimeProvider extends SimpleCloseable implements TimeProvider { +public class DistributedUniqueTimeProvider extends SimpleCloseable implements TimeProvider, Monitorable { static final int HOST_IDS = 100; private static final int LAST_TIME = 128; @@ -65,17 +65,17 @@ private DistributedUniqueTimeProvider(@NonNegative int hostId, boolean unmonitor hostId(hostId); try { file = MappedFile.ofSingle(new File(BytesUtil.TIME_STAMP_PATH), OS.pageSize(), false); - if (unmonitor) IOTools.unmonitor(file); bytes = file.acquireBytesForWrite(this, 0); - if (unmonitor) IOTools.unmonitor(bytes); bytes.append8bit("&TSF\nTime stamp file used for sharing a unique id\n"); values = new BinaryLongArrayReference(HOST_IDS); - if (unmonitor) IOTools.unmonitor(values); values.bytesStore(bytes, DEDUPLICATOR, HOST_IDS * 8L + 16L); deduplicator = new VanillaDistributedUniqueTimeDeduplicator(values); } catch (Exception ioe) { throw new IORuntimeException(ioe); + } finally { + if (unmonitor) + unmonitor(); } } @@ -283,6 +283,13 @@ private long currentTimeNanosLoop() { } } + @Override + public void unmonitor() { + Monitorable.unmonitor(file); + Monitorable.unmonitor(bytes); + Monitorable.unmonitor(values); + } + /** * A deduplicator to help recognise duplicate timestamps for a hostId */ diff --git a/src/main/java/net/openhft/chronicle/bytes/MappedUniqueTimeProvider.java b/src/main/java/net/openhft/chronicle/bytes/MappedUniqueTimeProvider.java index c36ceba16e3..2fa6f5f6b10 100644 --- a/src/main/java/net/openhft/chronicle/bytes/MappedUniqueTimeProvider.java +++ b/src/main/java/net/openhft/chronicle/bytes/MappedUniqueTimeProvider.java @@ -20,7 +20,7 @@ import net.openhft.chronicle.core.Jvm; import net.openhft.chronicle.core.OS; import net.openhft.chronicle.core.io.IORuntimeException; -import net.openhft.chronicle.core.io.IOTools; +import net.openhft.chronicle.core.io.Monitorable; import net.openhft.chronicle.core.io.ReferenceOwner; import net.openhft.chronicle.core.time.SystemTimeProvider; import net.openhft.chronicle.core.time.TimeProvider; @@ -53,8 +53,8 @@ public enum MappedUniqueTimeProvider implements TimeProvider, ReferenceOwner { final Bytes bytes = file.acquireBytesForWrite(this, 0); bytes.append8bit("&TSF\nTime stamp file used for sharing a unique id\n"); this.bytesStore = bytes.bytesStore(); - IOTools.unmonitor(file); - IOTools.unmonitor(bytes); + Monitorable.unmonitor(file); + Monitorable.unmonitor(bytes); } catch (Exception ioe) { throw new IORuntimeException(ioe); } diff --git a/src/main/java/net/openhft/chronicle/bytes/internal/SingleMappedFile.java b/src/main/java/net/openhft/chronicle/bytes/internal/SingleMappedFile.java index e532399b1d0..bb0de6dfaeb 100644 --- a/src/main/java/net/openhft/chronicle/bytes/internal/SingleMappedFile.java +++ b/src/main/java/net/openhft/chronicle/bytes/internal/SingleMappedFile.java @@ -23,10 +23,7 @@ import net.openhft.chronicle.core.OS; import net.openhft.chronicle.core.annotation.NonNegative; import net.openhft.chronicle.core.annotation.Positive; -import net.openhft.chronicle.core.io.ClosedIllegalStateException; -import net.openhft.chronicle.core.io.IORuntimeException; -import net.openhft.chronicle.core.io.ReferenceOwner; -import net.openhft.chronicle.core.io.ThreadingIllegalStateException; +import net.openhft.chronicle.core.io.*; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -404,4 +401,10 @@ public void chunkCount(long[] chunkCount) { public MappedBytes createBytesFor() { return new SingleMappedBytes(this); } + + @Override + public void unmonitor() { + super.unmonitor(); + Monitorable.unmonitor(store); + } } diff --git a/src/main/java/net/openhft/chronicle/bytes/ref/AbstractReference.java b/src/main/java/net/openhft/chronicle/bytes/ref/AbstractReference.java index 397cc6b4ba8..3f6a3928310 100644 --- a/src/main/java/net/openhft/chronicle/bytes/ref/AbstractReference.java +++ b/src/main/java/net/openhft/chronicle/bytes/ref/AbstractReference.java @@ -21,10 +21,7 @@ import net.openhft.chronicle.bytes.BytesStore; import net.openhft.chronicle.bytes.MappedBytesStore; import net.openhft.chronicle.core.annotation.NonNegative; -import net.openhft.chronicle.core.io.AbstractCloseable; -import net.openhft.chronicle.core.io.Closeable; -import net.openhft.chronicle.core.io.ClosedIllegalStateException; -import net.openhft.chronicle.core.io.ThreadingIllegalStateException; +import net.openhft.chronicle.core.io.*; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -188,4 +185,10 @@ public FileLock tryLock(boolean shared) throws IOException { } throw new UnsupportedOperationException(); } + + @Override + public void unmonitor() { + super.unmonitor(); + Monitorable.unmonitor(bytes); + } }