summaryrefslogtreecommitdiff
path: root/numpy
diff options
context:
space:
mode:
authorTravis Oliphant <oliphant@enthought.com>2006-05-17 21:57:21 +0000
committerTravis Oliphant <oliphant@enthought.com>2006-05-17 21:57:21 +0000
commit0f8a56410d6a780eb23558f33e9ef01759922dfc (patch)
tree367144ba116c57c1610aa04a746efc8772f159cd /numpy
parent6fcac575b2263913fb3308868fec7792278441df (diff)
downloadnumpy-0f8a56410d6a780eb23558f33e9ef01759922dfc.tar.gz
Fix memory leak in PyArray_Round that probably caused error in ticket #110
Diffstat (limited to 'numpy')
-rw-r--r--numpy/core/src/multiarraymodule.c22
1 files changed, 12 insertions, 10 deletions
diff --git a/numpy/core/src/multiarraymodule.c b/numpy/core/src/multiarraymodule.c
index f329872d2..99e98cd35 100644
--- a/numpy/core/src/multiarraymodule.c
+++ b/numpy/core/src/multiarraymodule.c
@@ -258,7 +258,7 @@ PyArray_Round(PyArrayObject *a, int decimals)
return PyArray_GenericUnaryFunction((PyAO *)a, n_ops.rint);
}
if (decimals > 0) {
- PyObject *f, *ret;
+ PyObject *f, *ret, *tmp;
if (PyArray_ISINTEGER(a)) {
Py_INCREF(a);
return (PyObject *)a;
@@ -269,39 +269,41 @@ PyArray_Round(PyArrayObject *a, int decimals)
if (ret==NULL) {Py_DECREF(f); return NULL;}
if (PyArray_IsScalar(ret, Generic)) {
/* array scalars cannot be modified inplace */
- PyObject *tmp;
tmp = PyObject_CallFunction(n_ops.rint, "O", ret);
Py_DECREF(ret);
ret = PyObject_CallFunction(n_ops.divide, "OO",
tmp, f);
Py_DECREF(tmp);
} else {
- PyObject_CallFunction(n_ops.rint, "OO", ret, ret);
- PyObject_CallFunction(n_ops.divide, "OOO", ret,
- f, ret);
+ tmp = PyObject_CallFunction(n_ops.rint, "OO", ret, ret);
+ Py_DECREF(tmp);
+ tmp = PyObject_CallFunction(n_ops.divide, "OOO", ret,
+ f, ret);
+ Py_DECREF(tmp);
}
Py_DECREF(f);
return ret;
}
else {
/* remaining case: decimals < 0 */
- PyObject *f, *ret;
+ PyObject *f, *ret, *tmp;
f = PyFloat_FromDouble(power_of_ten(-decimals));
if (f==NULL) return NULL;
ret = PyNumber_Divide((PyObject *)a, f);
if (ret==NULL) {Py_DECREF(f); return NULL;}
if (PyArray_IsScalar(ret, Generic)) {
/* array scalars cannot be modified inplace */
- PyObject *tmp;
tmp = PyObject_CallFunction(n_ops.rint, "O", ret);
Py_DECREF(ret);
ret = PyObject_CallFunction(n_ops.multiply, "OO",
tmp, f);
Py_DECREF(tmp);
} else {
- PyObject_CallFunction(n_ops.rint, "OO", ret, ret);
- PyObject_CallFunction(n_ops.multiply, "OOO", ret,
- f, ret);
+ tmp = PyObject_CallFunction(n_ops.rint, "OO", ret, ret);
+ Py_DECREF(tmp);
+ tmp = PyObject_CallFunction(n_ops.multiply, "OOO", ret,
+ f, ret);
+ Py_DECREF(tmp);
}
Py_DECREF(f);
return ret;