Repository: arrow
Updated Branches:
  refs/heads/master 5281a8264 -> 20cee707c


ARROW-1338: [Python] Do not close RecordBatchWriter on dealloc in case sink is 
no longer valid

Also add missing close() statements to test_mock_output_stream to fix invalid 
writes causing core dump on OS X.

Author: Wes McKinney <wes.mckin...@twosigma.com>

Closes #952 from wesm/ARROW-1338 and squashes the following commits:

88e8cefe [Wes McKinney] Do not close RecordBatchWriter on dealloc in case sink 
is no longer valid. Add missing close() statements to test_mock_output_stream


Project: http://git-wip-us.apache.org/repos/asf/arrow/repo
Commit: http://git-wip-us.apache.org/repos/asf/arrow/commit/20cee707
Tree: http://git-wip-us.apache.org/repos/asf/arrow/tree/20cee707
Diff: http://git-wip-us.apache.org/repos/asf/arrow/diff/20cee707

Branch: refs/heads/master
Commit: 20cee707cbfdaa5dc4f2b7dea09619f34a1f9f71
Parents: 5281a82
Author: Wes McKinney <wes.mckin...@twosigma.com>
Authored: Tue Aug 8 09:30:16 2017 -0400
Committer: Wes McKinney <wes.mckin...@twosigma.com>
Committed: Tue Aug 8 09:30:16 2017 -0400

----------------------------------------------------------------------
 python/pyarrow/ipc.pxi          | 16 ++++++++++++++--
 python/pyarrow/tests/test_io.py |  2 ++
 2 files changed, 16 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/arrow/blob/20cee707/python/pyarrow/ipc.pxi
----------------------------------------------------------------------
diff --git a/python/pyarrow/ipc.pxi b/python/pyarrow/ipc.pxi
index d6f62aa..ceed4b0 100644
--- a/python/pyarrow/ipc.pxi
+++ b/python/pyarrow/ipc.pxi
@@ -163,8 +163,7 @@ cdef class _RecordBatchWriter:
         self.closed = True
 
     def __dealloc__(self):
-        if not self.closed:
-            self.close()
+        pass
 
     def _open(self, sink, Schema schema):
         cdef:
@@ -182,11 +181,24 @@ cdef class _RecordBatchWriter:
         self.closed = False
 
     def write_batch(self, RecordBatch batch):
+        """
+        Write RecordBatch to stream
+
+        Parameters
+        ----------
+        batch : RecordBatch
+        """
         with nogil:
             check_status(self.writer.get()
                          .WriteRecordBatch(deref(batch.batch)))
 
     def close(self):
+        """
+        Close stream and write end-of-stream 0 marker
+        """
+        if self.closed:
+            return
+
         with nogil:
             check_status(self.writer.get().Close())
         self.closed = True

http://git-wip-us.apache.org/repos/asf/arrow/blob/20cee707/python/pyarrow/tests/test_io.py
----------------------------------------------------------------------
diff --git a/python/pyarrow/tests/test_io.py b/python/pyarrow/tests/test_io.py
index c81a048..d503ea2 100644
--- a/python/pyarrow/tests/test_io.py
+++ b/python/pyarrow/tests/test_io.py
@@ -277,6 +277,8 @@ def test_mock_output_stream():
 
     stream_writer1.write_batch(record_batch)
     stream_writer2.write_batch(record_batch)
+    stream_writer1.close()
+    stream_writer2.close()
 
     assert f1.size() == len(f2.get_result())
 

Reply via email to