From 41c418aa1cbc2a7d130176ab08326f3f488238ac Mon Sep 17 00:00:00 2001 From: Constantine Vetoshev Date: Fri, 24 Jun 2016 16:43:57 -0700 Subject: [PATCH] Use PyObject_AsReadBuffer instead of bytes(). --- capnp/lib/capnp.pyx | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/capnp/lib/capnp.pyx b/capnp/lib/capnp.pyx index 54344b2..5d44e8b 100644 --- a/capnp/lib/capnp.pyx +++ b/capnp/lib/capnp.pyx @@ -3789,20 +3789,20 @@ cdef class _SegmentArrayMessageReader(_MessageReader): opts.nestingLimit = nesting_limit # take a Python array of bytes and constructs a ConstWordArrayArrayPtr num_segments = len(segments) - cdef char* ptr + cdef const void* ptr + cdef Py_ssize_t segment_size cdef schema_cpp.ConstWordArrayPtr seg_ptr self._seg_ptrs = malloc(num_segments * sizeof(schema_cpp.ConstWordArrayPtr)) self._objects_to_pin = [] for i in range(0, num_segments): - segment = bytes(segments[i]) - ptr = segment + PyObject_AsReadBuffer(segments[i], &ptr, &segment_size) if (ptr) % 8 != 0: - aligned = _AlignedBuffer(segment) + aligned = _AlignedBuffer(segments[i]) ptr = aligned.buf self._objects_to_pin.append(aligned) else: - self._objects_to_pin.append(segment) - seg_ptr = schema_cpp.ConstWordArrayPtr(ptr, len(segment)//8) + self._objects_to_pin.append(segments[i]) + seg_ptr = schema_cpp.ConstWordArrayPtr(ptr, segment_size//8) self._seg_ptrs[i] = seg_ptr self.thisptr = new schema_cpp.SegmentArrayMessageReader( schema_cpp.ConstWordArrayArrayPtr(self._seg_ptrs, num_segments),