diff --git a/dhfs-parent/dhfs-fuse/src/main/java/com/usatiuk/dhfsfuse/DhfsFuse.java b/dhfs-parent/dhfs-fuse/src/main/java/com/usatiuk/dhfsfuse/DhfsFuse.java index 2ac16027..6a5e17ee 100644 --- a/dhfs-parent/dhfs-fuse/src/main/java/com/usatiuk/dhfsfuse/DhfsFuse.java +++ b/dhfs-parent/dhfs-fuse/src/main/java/com/usatiuk/dhfsfuse/DhfsFuse.java @@ -246,9 +246,9 @@ public class DhfsFuse extends FuseStubFS { @Override public int write(String path, Pointer buf, long size, long offset, FuseFileInfo fi) { var buffer = UninitializedByteBuffer.allocate((int) size); - UnsafeAccessor.get().getUnsafe().copyMemory( + UnsafeAccessor.UNSAFE.copyMemory( buf.address(), - UnsafeAccessor.get().getNioAccess().getBufferAddress(buffer), + UnsafeAccessor.NIO.getBufferAddress(buffer), size ); return write(path, buffer, offset, fi); diff --git a/dhfs-parent/dhfs-fuse/src/main/java/com/usatiuk/dhfsfuse/JnrPtrByteOutput.java b/dhfs-parent/dhfs-fuse/src/main/java/com/usatiuk/dhfsfuse/JnrPtrByteOutput.java index 29482e65..c0ff09d6 100644 --- a/dhfs-parent/dhfs-fuse/src/main/java/com/usatiuk/dhfsfuse/JnrPtrByteOutput.java +++ b/dhfs-parent/dhfs-fuse/src/main/java/com/usatiuk/dhfsfuse/JnrPtrByteOutput.java @@ -46,9 +46,9 @@ public class JnrPtrByteOutput extends ByteOutput { if (value instanceof MappedByteBuffer mb) { mb.load(); } - long addr = UnsafeAccessor.get().getNioAccess().getBufferAddress(value) + value.position(); + long addr = UnsafeAccessor.NIO.getBufferAddress(value) + value.position(); var out = _backing.address() + _pos; - UnsafeAccessor.get().getUnsafe().copyMemory(addr, out, rem); + UnsafeAccessor.UNSAFE.copyMemory(addr, out, rem); } else { _backing.put(_pos, value.array(), value.arrayOffset() + value.position(), rem); } diff --git a/dhfs-parent/utils/src/main/java/com/usatiuk/utils/UninitializedByteBuffer.java b/dhfs-parent/utils/src/main/java/com/usatiuk/utils/UninitializedByteBuffer.java index a5ff97bb..3e857d90 100644 --- a/dhfs-parent/utils/src/main/java/com/usatiuk/utils/UninitializedByteBuffer.java +++ b/dhfs-parent/utils/src/main/java/com/usatiuk/utils/UninitializedByteBuffer.java @@ -17,7 +17,7 @@ public class UninitializedByteBuffer { ); public static ByteBuffer allocate(int capacity) { - UnsafeAccessor.get().getNioAccess().reserveMemory(capacity, capacity); + UnsafeAccessor.NIO.reserveMemory(capacity, capacity); MemorySegment segment = null; try { @@ -29,7 +29,7 @@ public class UninitializedByteBuffer { Consumer cleanup = s -> { try { free.invokeExact(s); - UnsafeAccessor.get().getNioAccess().unreserveMemory(capacity, capacity); + UnsafeAccessor.NIO.unreserveMemory(capacity, capacity); } catch (Throwable e) { throw new RuntimeException(e); } @@ -39,6 +39,6 @@ public class UninitializedByteBuffer { } public static long getAddress(ByteBuffer buffer) { - return UnsafeAccessor.get().getNioAccess().getBufferAddress(buffer); + return UnsafeAccessor.NIO.getBufferAddress(buffer); } } diff --git a/dhfs-parent/utils/src/main/java/com/usatiuk/utils/UnsafeAccessor.java b/dhfs-parent/utils/src/main/java/com/usatiuk/utils/UnsafeAccessor.java index d6c33519..17d72460 100644 --- a/dhfs-parent/utils/src/main/java/com/usatiuk/utils/UnsafeAccessor.java +++ b/dhfs-parent/utils/src/main/java/com/usatiuk/utils/UnsafeAccessor.java @@ -6,36 +6,18 @@ import sun.misc.Unsafe; import java.lang.reflect.Field; -public class UnsafeAccessor { - private static final UnsafeAccessor INSTANCE; +public abstract class UnsafeAccessor { + public static final JavaNioAccess NIO; + public static final Unsafe UNSAFE; static { try { - INSTANCE = new UnsafeAccessor(); + NIO = SharedSecrets.getJavaNioAccess(); + Field f = Unsafe.class.getDeclaredField("theUnsafe"); + f.setAccessible(true); + UNSAFE = (Unsafe) f.get(null); } catch (Exception e) { throw new RuntimeException(e); } } - - public static UnsafeAccessor get() { - return INSTANCE; - } - - private JavaNioAccess _nioAccess; - private Unsafe _unsafe; - - private UnsafeAccessor() throws NoSuchFieldException, IllegalAccessException { - _nioAccess = SharedSecrets.getJavaNioAccess(); - Field f = Unsafe.class.getDeclaredField("theUnsafe"); - f.setAccessible(true); - _unsafe = (Unsafe) f.get(null); - } - - public JavaNioAccess getNioAccess() { - return _nioAccess; - } - - public Unsafe getUnsafe() { - return _unsafe; - } }