From 3e5feb11bebce214cb3838bbeca02b68fee692c4 Mon Sep 17 00:00:00 2001 From: jakirkham Date: Thu, 22 May 2025 10:50:49 -0700 Subject: [PATCH 1/2] Use `try...finally...` to ensure buffer is released --- python/kvikio/kvikio/_lib/arr.pyx | 51 ++++++++++++++++--------------- 1 file changed, 26 insertions(+), 25 deletions(-) diff --git a/python/kvikio/kvikio/_lib/arr.pyx b/python/kvikio/kvikio/_lib/arr.pyx index e147dbcf90..a13249930f 100644 --- a/python/kvikio/kvikio/_lib/arr.pyx +++ b/python/kvikio/kvikio/_lib/arr.pyx @@ -130,36 +130,37 @@ cdef class Array: self.strides_mv = None else: PyObject_GetBuffer(obj, &pybuf, PyBUF_FULL_RO) - - if pybuf.suboffsets != NULL: - raise NotImplementedError("Suboffsets are not supported") - - self.ptr = pybuf.buf - self.obj = pybuf.obj - self.readonly = pybuf.readonly - self.ndim = pybuf.ndim - self.itemsize = pybuf.itemsize - - if self.ndim > 0: - self.shape_mv = new_Py_ssize_t_array(self.ndim) - memcpy( - &self.shape_mv[0], - pybuf.shape, - self.ndim * sizeof(Py_ssize_t) - ) - if not PyBuffer_IsContiguous(&pybuf, b"C"): - self.strides_mv = new_Py_ssize_t_array(self.ndim) + try: + if pybuf.suboffsets != NULL: + raise NotImplementedError("Suboffsets are not supported") + + self.ptr = pybuf.buf + self.obj = pybuf.obj + self.readonly = pybuf.readonly + self.ndim = pybuf.ndim + self.itemsize = pybuf.itemsize + + if self.ndim > 0: + self.shape_mv = new_Py_ssize_t_array(self.ndim) memcpy( - &self.strides_mv[0], - pybuf.strides, + &self.shape_mv[0], + pybuf.shape, self.ndim * sizeof(Py_ssize_t) ) + if not PyBuffer_IsContiguous(&pybuf, b"C"): + self.strides_mv = new_Py_ssize_t_array(self.ndim) + memcpy( + &self.strides_mv[0], + pybuf.strides, + self.ndim * sizeof(Py_ssize_t) + ) + else: + self.strides_mv = None else: + self.shape_mv = None self.strides_mv = None - else: - self.shape_mv = None - self.strides_mv = None - PyBuffer_Release(&pybuf) + finally: + PyBuffer_Release(&pybuf) cpdef bint _c_contiguous(self): return _c_contiguous( From ef55e3c936dd6dcc7eea4d3eb9e04cfcd00c3497 Mon Sep 17 00:00:00 2001 From: jakirkham Date: Thu, 22 May 2025 11:22:09 -0700 Subject: [PATCH 2/2] Remove spaces on blank lines --- python/kvikio/kvikio/_lib/arr.pyx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/python/kvikio/kvikio/_lib/arr.pyx b/python/kvikio/kvikio/_lib/arr.pyx index a13249930f..19818d7cc0 100644 --- a/python/kvikio/kvikio/_lib/arr.pyx +++ b/python/kvikio/kvikio/_lib/arr.pyx @@ -133,13 +133,13 @@ cdef class Array: try: if pybuf.suboffsets != NULL: raise NotImplementedError("Suboffsets are not supported") - + self.ptr = pybuf.buf self.obj = pybuf.obj self.readonly = pybuf.readonly self.ndim = pybuf.ndim self.itemsize = pybuf.itemsize - + if self.ndim > 0: self.shape_mv = new_Py_ssize_t_array(self.ndim) memcpy(