summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--numpy/core/src/multiarray/arrayobject.c8
-rw-r--r--numpy/core/src/multiarray/na_mask.c1
2 files changed, 8 insertions, 1 deletions
diff --git a/numpy/core/src/multiarray/arrayobject.c b/numpy/core/src/multiarray/arrayobject.c
index 987826512..f510a3dbc 100644
--- a/numpy/core/src/multiarray/arrayobject.c
+++ b/numpy/core/src/multiarray/arrayobject.c
@@ -355,6 +355,14 @@ array_dealloc(PyArrayObject *self)
PyDataMem_FREE(fa->data);
}
+ /* If the array has an NA mask, free its associated data */
+ if (fa->flags & NPY_ARRAY_MASKNA) {
+ Py_DECREF(fa->maskna_dtype);
+ if (fa->flags & NPY_ARRAY_OWNMASKNA) {
+ PyDataMem_FREE(fa->maskna_data);
+ }
+ }
+
PyDimMem_FREE(fa->dimensions);
Py_DECREF(fa->descr);
Py_TYPE(self)->tp_free((PyObject *)self);
diff --git a/numpy/core/src/multiarray/na_mask.c b/numpy/core/src/multiarray/na_mask.c
index b7af2c824..5c67250d7 100644
--- a/numpy/core/src/multiarray/na_mask.c
+++ b/numpy/core/src/multiarray/na_mask.c
@@ -215,7 +215,6 @@ PyArray_AllocateMaskNA(PyArrayObject *arr, npy_bool ownmaskna, npy_bool multina)
}
/* Set the NA mask data in the array */
- Py_XDECREF(maskna_dtype);
fa->maskna_dtype = maskna_dtype;
fa->maskna_data = maskna_data;
fa->flags |= (NPY_ARRAY_MASKNA | NPY_ARRAY_OWNMASKNA);