diff --git a/bindings/java/src/org/sleuthkit/datamodel/SleuthkitJNI.java b/bindings/java/src/org/sleuthkit/datamodel/SleuthkitJNI.java index 6f597e215282b5ba9b5cd3d8008c40855a764002..9763edf1978faa460ed824dc4f52eeb08f9f498f 100644 --- a/bindings/java/src/org/sleuthkit/datamodel/SleuthkitJNI.java +++ b/bindings/java/src/org/sleuthkit/datamodel/SleuthkitJNI.java @@ -884,7 +884,12 @@ public static void closeImg(long imgHandle) { * @param vsHandle pointer to volume system structure in sleuthkit */ public static void closeVs(long vsHandle) { - closeVsNat(vsHandle); + // NOTE: We are not caching Volume System handles, so we + // can free it. One is allocated per VolumeSystem object. + // There is a chance that a vsPart handle exists in a Volume object, + // and that memory will be freed. But, the "TAG" checks in the native + // code should detect that it has been freed. + closeVsNat(vsHandle); } /** diff --git a/bindings/java/src/org/sleuthkit/datamodel/Volume.java b/bindings/java/src/org/sleuthkit/datamodel/Volume.java index a339e923ec9454760e7098a044c85c07c9dfe92e..c3a7b7cda8e791faa03117944389c8958b6a7767 100644 --- a/bindings/java/src/org/sleuthkit/datamodel/Volume.java +++ b/bindings/java/src/org/sleuthkit/datamodel/Volume.java @@ -79,14 +79,9 @@ public int read(byte[] buf, long offset, long len) throws TskCoreException { @Override public void close() { - if (volumeHandle != 0) { - synchronized (this) { - if (volumeHandle != 0) { - SleuthkitJNI.closeVs(volumeHandle); - volumeHandle = 0; - } - } - } + // there is nothing to free. The VolumeSystem structure + // in C++ contains this structure and will free it. + volumeHandle = 0; } @Override