From fed5fcbbd5f1ca578f2eb3661a8260b4e21965ea Mon Sep 17 00:00:00 2001 From: Liang-Chi Hsieh Date: Tue, 10 Sep 2024 00:30:54 -0700 Subject: [PATCH] GH-43996: [Java] Mark new allocated ArrowSchema as released (#43997) ### Rationale for this change As described in #43996. ### What changes are included in this PR? ### Are these changes tested? ### Are there any user-facing changes? * GitHub Issue: #43996 Authored-by: Liang-Chi Hsieh Signed-off-by: David Li --- .../src/main/java/org/apache/arrow/c/ArrowSchema.java | 10 +++++++++- .../java/org/apache/arrow/c/ArrowArrayUtilityTest.java | 7 +++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/java/c/src/main/java/org/apache/arrow/c/ArrowSchema.java b/java/c/src/main/java/org/apache/arrow/c/ArrowSchema.java index 06e401627ef01..ad9f16ae9ceed 100644 --- a/java/c/src/main/java/org/apache/arrow/c/ArrowSchema.java +++ b/java/c/src/main/java/org/apache/arrow/c/ArrowSchema.java @@ -52,6 +52,7 @@ */ public class ArrowSchema implements BaseStruct { private static final int SIZE_OF = 72; + private static final int INDEX_RELEASE_CALLBACK = 56; private ArrowBuf data; @@ -103,7 +104,9 @@ public static ArrowSchema wrap(long memoryAddress) { * @return A new ArrowSchema instance */ public static ArrowSchema allocateNew(BufferAllocator allocator) { - return new ArrowSchema(allocator.buffer(ArrowSchema.SIZE_OF)); + ArrowSchema schema = new ArrowSchema(allocator.buffer(ArrowSchema.SIZE_OF)); + schema.markReleased(); + return schema; } ArrowSchema(ArrowBuf data) { @@ -111,6 +114,11 @@ public static ArrowSchema allocateNew(BufferAllocator allocator) { this.data = data; } + /** Mark the schema as released. */ + public void markReleased() { + directBuffer().putLong(INDEX_RELEASE_CALLBACK, NULL); + } + @Override public long memoryAddress() { checkNotNull(data, "ArrowSchema is already closed"); diff --git a/java/c/src/test/java/org/apache/arrow/c/ArrowArrayUtilityTest.java b/java/c/src/test/java/org/apache/arrow/c/ArrowArrayUtilityTest.java index 1d4cb411fab45..511358a5e62fa 100644 --- a/java/c/src/test/java/org/apache/arrow/c/ArrowArrayUtilityTest.java +++ b/java/c/src/test/java/org/apache/arrow/c/ArrowArrayUtilityTest.java @@ -50,6 +50,13 @@ void afterEach() { allocator.close(); } + @Test + void arraySchemaInit() { + ArrowSchema schema = ArrowSchema.allocateNew(allocator); + assertThat(schema.snapshot().release).isEqualTo(0); + schema.close(); + } + // ------------------------------------------------------------ // BufferImportTypeVisitor