Skip to content

Commit ec2c383

Browse files
authored
fix: Make all JNI types support idempotent close (#3752)
Spark/Iceberg ends up calling close multiple times Signed-off-by: Andrew Duffy <andrew@a10y.dev> --------- Signed-off-by: Andrew Duffy <andrew@a10y.dev>
1 parent 81112ff commit ec2c383

File tree

4 files changed

+12
-1
lines changed

4 files changed

+12
-1
lines changed

java/vortex-jni/src/main/java/dev/vortex/jni/JNIArray.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,10 @@ public byte[] getBinary(int index) {
153153

154154
@Override
155155
public void close() {
156+
if (pointer.isEmpty()) {
157+
return;
158+
}
159+
156160
NativeArrayMethods.free(pointer.getAsLong());
157161
pointer = OptionalLong.empty();
158162
}

java/vortex-jni/src/main/java/dev/vortex/jni/JNIArrayIterator.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,10 @@ public DType getDataType() {
5151

5252
@Override
5353
public void close() {
54+
if (pointer.isEmpty()) {
55+
return;
56+
}
57+
5458
NativeArrayIteratorMethods.free(pointer.getAsLong());
5559
pointer = OptionalLong.empty();
5660
next = Optional.empty();

java/vortex-jni/src/main/java/dev/vortex/jni/JNIDType.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ public byte getScale() {
101101

102102
@Override
103103
public void close() {
104-
if (shouldFree) {
104+
if (shouldFree && pointer.isPresent()) {
105105
NativeDTypeMethods.free(pointer.getAsLong());
106106
pointer = OptionalLong.empty();
107107
}

java/vortex-jni/src/main/java/dev/vortex/jni/JNIFile.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,9 @@ public ArrayIterator newScan(ScanOptions options) {
6060

6161
@Override
6262
public void close() {
63+
if (pointer.isEmpty()) {
64+
return;
65+
}
6366
NativeFileMethods.close(pointer.getAsLong());
6467
pointer = OptionalLong.empty();
6568
}

0 commit comments

Comments
 (0)