parthchandra commented on code in PR #1050:
URL: https://github.com/apache/datafusion-comet/pull/1050#discussion_r1828407319


##########
native/core/src/common/buffer.rs:
##########
@@ -163,11 +168,28 @@ impl CometBuffer {
     /// because of the iterator-style pattern, the content of the original 
mutable buffer will only
     /// be updated once upstream operators fully consumed the previous output 
batch. For breaking
     /// operators, they are responsible for copying content out of the buffers.
-    pub unsafe fn to_arrow(&self) -> ArrowBuffer {
+    pub unsafe fn to_arrow(&self) -> Result<ArrowBuffer, ExecutionError> {
         let ptr = NonNull::new_unchecked(self.data.as_ptr());
-        // Uses a dummy `Arc::new(0)` as `Allocation` to ensure the memory 
region pointed by
-        // `ptr` won't be freed when the returned `ArrowBuffer` goes out of 
scope.
-        ArrowBuffer::from_custom_allocation(ptr, self.len, Arc::new(0))
+        self.check_reference()?;
+        Ok(ArrowBuffer::from_custom_allocation(
+            ptr,
+            self.len,
+            Arc::<CometBufferAllocation>::clone(&self.allocation),
+        ))
+    }
+
+    /// Checks if this buffer is exclusively owned by Comet. If not, an error 
is returned.
+    /// We run this check when we want to update the buffer. If the buffer is 
also shared by
+    /// other components, e.g. one DataFusion operator stores the buffer, 
Comet cannot safely
+    /// modify the buffer.
+    pub fn check_reference(&self) -> Result<(), ExecutionError> {

Review Comment:
   Does this need to be thread safe? Arc::strong_count is thread safe but the 
reference count may change before the method returns



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: github-unsubscr...@datafusion.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: github-unsubscr...@datafusion.apache.org
For additional commands, e-mail: github-h...@datafusion.apache.org

Reply via email to