You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@arrow.apache.org by "Philipp Moritz (JIRA)" <ji...@apache.org> on 2017/10/20 17:14:00 UTC
[jira] [Created] (ARROW-1695) [Serialization] Fix reference
counting of numpy arrays created in custom serialializer
Philipp Moritz created ARROW-1695:
-------------------------------------
Summary: [Serialization] Fix reference counting of numpy arrays created in custom serialializer
Key: ARROW-1695
URL: https://issues.apache.org/jira/browse/ARROW-1695
Project: Apache Arrow
Issue Type: Bug
Components: Python
Affects Versions: 0.7.1
Reporter: Philipp Moritz
Fix For: 0.8.0
The problem happens with the following code:
{code}
import numpy as np
import pyarrow
import sys
class Bar(object):
pass
def bar_custom_serializer(obj):
x = np.zeros(4)
return x
def bar_custom_deserializer(serialized_obj):
return serialized_obj
pyarrow._default_serialization_context.register_type(Bar, "Bar", pickle=False, custom_serializer=bar_custom_serializer, custom_deserializer=bar_custom_deserializer)
pyarrow.serialize(Bar())
{code}
After execution of pyarrow.serialize, the interpreter crashes in the garbage collection routine.
This happens if a numpy array is returned in the custom serializer but there is no other reference to the numpy array. The reason this is not a problem in the current code is that so far we haven't created new numpy arrays in the custom serializer.
I think the problem here is that the numpy array hits reference count zero between the end of SerializeSequences in python_to_arrow.cc and the call to NdarrayToTensor. I'll push a fix later today, which just increases and decreases the reference counts at the appropriate places.
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)