diff options
author | mattip <matti.picus@gmail.com> | 2018-03-29 13:42:40 +0300 |
---|---|---|
committer | mattip <matti.picus@gmail.com> | 2018-04-21 23:53:44 +0300 |
commit | 05d94b9f59f2ca8e9dbc82fd01ac31a6b6aa34d7 (patch) | |
tree | e1097b6cfd346abe13aff3f2d0064290467e153d /numpy/core/include | |
parent | e0b5e8740efe6d42c909c1374494e614592c65ab (diff) | |
download | numpy-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.h | 9 |
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); } |