From 05d94b9f59f2ca8e9dbc82fd01ac31a6b6aa34d7 Mon Sep 17 00:00:00 2001 From: mattip Date: Thu, 29 Mar 2018 13:42:40 +0300 Subject: BUG: test, fix PyArray_DiscardWritebackIfCopy refcount issue and document --- numpy/core/include/numpy/ndarrayobject.h | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'numpy/core/include') diff --git a/numpy/core/include/numpy/ndarrayobject.h b/numpy/core/include/numpy/ndarrayobject.h index ec0fd1ee9..97e41b6f3 100644 --- a/numpy/core/include/numpy/ndarrayobject.h +++ b/numpy/core/include/numpy/ndarrayobject.h @@ -170,14 +170,19 @@ extern "C" CONFUSE_EMACS (k)*PyArray_STRIDES(obj)[2] + \ (l)*PyArray_STRIDES(obj)[3])) +/* Move to arrayobject.c once PyArray_XDECREF_ERR is removed */ static NPY_INLINE void PyArray_DiscardWritebackIfCopy(PyArrayObject *arr) { if (arr != NULL) { + PyArrayObject_fields *fa = (PyArrayObject_fields *)arr; if ((PyArray_FLAGS(arr) & NPY_ARRAY_WRITEBACKIFCOPY) || (PyArray_FLAGS(arr) & NPY_ARRAY_UPDATEIFCOPY)) { - PyArrayObject *base = (PyArrayObject *)PyArray_BASE(arr); - PyArray_ENABLEFLAGS(base, NPY_ARRAY_WRITEABLE); + if (fa->base) { + PyArray_ENABLEFLAGS((PyArrayObject*)fa->base, NPY_ARRAY_WRITEABLE); + Py_DECREF(fa->base); + fa->base = NULL; + } PyArray_CLEARFLAGS(arr, NPY_ARRAY_WRITEBACKIFCOPY); PyArray_CLEARFLAGS(arr, NPY_ARRAY_UPDATEIFCOPY); } -- cgit v1.2.1