This is an automated email from the ASF dual-hosted git repository.

paleolimbot pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow-nanoarrow.git


The following commit(s) were added to refs/heads/main by this push:
     new 30d01a9  fix: clear `release` in `EmptyArrayStream::release_wrapper` 
(#204)
30d01a9 is described below

commit 30d01a98b190bd6931d5ed32967b7bbc0b03b55c
Author: David Li <[email protected]>
AuthorDate: Thu May 25 12:01:55 2023 -0400

    fix: clear `release` in `EmptyArrayStream::release_wrapper` (#204)
    
    Fixes #203.
---
 src/nanoarrow/nanoarrow.hpp         | 2 ++
 src/nanoarrow/nanoarrow_hpp_test.cc | 8 ++++++++
 2 files changed, 10 insertions(+)

diff --git a/src/nanoarrow/nanoarrow.hpp b/src/nanoarrow/nanoarrow.hpp
index 8dcd16c..da54a57 100644
--- a/src/nanoarrow/nanoarrow.hpp
+++ b/src/nanoarrow/nanoarrow.hpp
@@ -301,6 +301,8 @@ class EmptyArrayStream {
 
   static void release_wrapper(struct ArrowArrayStream* stream) {
     delete reinterpret_cast<EmptyArrayStream*>(stream->private_data);
+    stream->release = nullptr;
+    stream->private_data = nullptr;
   }
 };
 
diff --git a/src/nanoarrow/nanoarrow_hpp_test.cc 
b/src/nanoarrow/nanoarrow_hpp_test.cc
index 4b1d661..5eef4d5 100644
--- a/src/nanoarrow/nanoarrow_hpp_test.cc
+++ b/src/nanoarrow/nanoarrow_hpp_test.cc
@@ -106,6 +106,14 @@ TEST(NanoarrowHppTest, NanoarrowHppUniqueArrayStreamTest) {
   EXPECT_NE(array_stream3->release, nullptr);
   EXPECT_EQ(array_stream3->get_schema(array_stream2.get(), schema.get()), 
NANOARROW_OK);
   EXPECT_STREQ(schema->format, "i");
+
+  // releasing should clear the release callback
+  EXPECT_EQ(ArrowSchemaInitFromType(schema_in.get(), NANOARROW_TYPE_INT32), 
NANOARROW_OK);
+  auto array_stream4 = 
nanoarrow::EmptyArrayStream::MakeUnique(schema_in.get());
+  EXPECT_NE(array_stream4->release, nullptr);
+  array_stream4->release(array_stream4.get());
+  EXPECT_EQ(array_stream4->private_data, nullptr);
+  EXPECT_EQ(array_stream4->release, nullptr);
 }
 
 TEST(NanoarrowHppTest, NanoarrowHppUniqueBufferTest) {

Reply via email to