Fix memory leak.

This commit is contained in:
Constantine Vetoshev
2016-06-24 14:03:20 -07:00
parent f703a7f099
commit e8a8d26260

View File

@@ -3779,6 +3779,7 @@ cdef class _FlatArrayMessageReader(_MessageReader):
cdef class _SegmentArrayMessageReader(_MessageReader): cdef class _SegmentArrayMessageReader(_MessageReader):
cdef object _objects_to_pin cdef object _objects_to_pin
cdef schema_cpp.ConstWordArrayPtr* _seg_ptrs
def __init__(self, segments, traversal_limit_in_words = None, nesting_limit = None): def __init__(self, segments, traversal_limit_in_words = None, nesting_limit = None):
cdef schema_cpp.ReaderOptions opts cdef schema_cpp.ReaderOptions opts
@@ -3790,7 +3791,7 @@ cdef class _SegmentArrayMessageReader(_MessageReader):
num_segments = len(segments) num_segments = len(segments)
cdef char* ptr cdef char* ptr
cdef schema_cpp.ConstWordArrayPtr seg_ptr cdef schema_cpp.ConstWordArrayPtr seg_ptr
cdef schema_cpp.ConstWordArrayPtr* seg_ptrs = <schema_cpp.ConstWordArrayPtr*>malloc(num_segments * sizeof(schema_cpp.ConstWordArrayPtr)) self._seg_ptrs = <schema_cpp.ConstWordArrayPtr*>malloc(num_segments * sizeof(schema_cpp.ConstWordArrayPtr))
self._objects_to_pin = [] self._objects_to_pin = []
for i in range(0, num_segments): for i in range(0, num_segments):
segment = bytes(segments[i]) segment = bytes(segments[i])
@@ -3802,12 +3803,13 @@ cdef class _SegmentArrayMessageReader(_MessageReader):
else: else:
self._objects_to_pin.append(segment) self._objects_to_pin.append(segment)
seg_ptr = schema_cpp.ConstWordArrayPtr(<schema_cpp.word*>ptr, len(segment)//8) seg_ptr = schema_cpp.ConstWordArrayPtr(<schema_cpp.word*>ptr, len(segment)//8)
seg_ptrs[i] = seg_ptr self._seg_ptrs[i] = seg_ptr
self.thisptr = new schema_cpp.SegmentArrayMessageReader( self.thisptr = new schema_cpp.SegmentArrayMessageReader(
schema_cpp.ConstWordArrayArrayPtr(seg_ptrs, num_segments), schema_cpp.ConstWordArrayArrayPtr(self._seg_ptrs, num_segments),
opts) opts)
def __dealloc__(self): def __dealloc__(self):
free(self._seg_ptrs)
del self.thisptr del self.thisptr