summaryrefslogtreecommitdiff
path: root/numpy/core/include
diff options
context:
space:
mode:
authormattip <matti.picus@gmail.com>2018-03-29 13:42:40 +0300
committermattip <matti.picus@gmail.com>2018-04-21 23:53:44 +0300
commit05d94b9f59f2ca8e9dbc82fd01ac31a6b6aa34d7 (patch)
treee1097b6cfd346abe13aff3f2d0064290467e153d /numpy/core/include
parente0b5e8740efe6d42c909c1374494e614592c65ab (diff)
downloadnumpy-05d94b9f59f2ca8e9dbc82fd01ac31a6b6aa34d7.tar.gz
BUG: test, fix PyArray_DiscardWritebackIfCopy refcount issue and document
Diffstat (limited to 'numpy/core/include')
-rw-r--r--numpy/core/include/numpy/ndarrayobject.h9
1 files changed, 7 insertions, 2 deletions
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);
}