提交 9bdeda96 authored 作者: Pascal Lamblin's avatar Pascal Lamblin

Fix a big memory leak in CudaNdArray_setItem (and a smaller one in zeros)

上级 ed3b9520
...@@ -311,6 +311,7 @@ PyObject* CudaNdarray_Zeros(PyObject* dummy, PyObject* shape) ...@@ -311,6 +311,7 @@ PyObject* CudaNdarray_Zeros(PyObject* dummy, PyObject* shape)
} }
int shp_el = PyInt_AsLong(shp_el_obj); int shp_el = PyInt_AsLong(shp_el_obj);
Py_DECREF(shp_el_obj);
if (shp_el <= 0) if (shp_el <= 0)
{ {
...@@ -318,9 +319,8 @@ PyObject* CudaNdarray_Zeros(PyObject* dummy, PyObject* shape) ...@@ -318,9 +319,8 @@ PyObject* CudaNdarray_Zeros(PyObject* dummy, PyObject* shape)
free(newdims); free(newdims);
return NULL; return NULL;
} }
newdims[i] = shp_el; newdims[i] = shp_el;
total_elements *= newdims[i]; total_elements *= newdims[i];
} }
...@@ -1383,23 +1383,26 @@ CudaNdarray_setitem(PyObject *o, PyObject *key, PyObject *v) ...@@ -1383,23 +1383,26 @@ CudaNdarray_setitem(PyObject *o, PyObject *key, PyObject *v)
Py_DECREF((PyObject*)rval); Py_DECREF((PyObject*)rval);
return -1; return -1;
} }
if(CudaNdarray_CopyFromCudaNdarray(rval, (CudaNdarray*)v)) if(CudaNdarray_CopyFromCudaNdarray(rval, (CudaNdarray*)v))
{ {
Py_DECREF(viewCopyForComparison); Py_DECREF(viewCopyForComparison);
Py_DECREF((PyObject*)rval); Py_DECREF((PyObject*)rval);
return -1; return -1;
} }
// Check that copy didn't modify shape or strides // Check that copy didn't modify shape or strides
assert (CudaNdarray_EqualAndIgnore(viewCopyForComparison, rval, 1, 1)); assert (CudaNdarray_EqualAndIgnore(viewCopyForComparison, rval, 1, 1));
assert (rval->base == baseSavedForComparison); assert (rval->base == baseSavedForComparison);
assert (rval->dev_structure_fresh); assert (rval->dev_structure_fresh);
// Clean up locally-created references
Py_DECREF((PyObject*)viewCopyForComparison); Py_DECREF((PyObject*)viewCopyForComparison);
Py_DECREF(rval);
return 0; return 0;
} }
PyMappingMethods CudaNdarrayMappingMethods = { PyMappingMethods CudaNdarrayMappingMethods = {
CudaNdarray_len, //lenfunc mp_length; __len__ CudaNdarray_len, //lenfunc mp_length; __len__
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论