提交 406e9fe7 authored 作者: Frédéric Bastien's avatar Frédéric Bastien

Merge pull request #3193 from carriepl/gpu_reshape_memory_leak

Free new_shape before exiting in gpu_reshape
...@@ -2438,7 +2438,7 @@ class GpuReshape(tensor.Reshape, GpuOp): ...@@ -2438,7 +2438,7 @@ class GpuReshape(tensor.Reshape, GpuOp):
out[0] = x.reshape(tuple(shp)) out[0] = x.reshape(tuple(shp))
def c_code_cache_version(self): def c_code_cache_version(self):
return (1,) return (2,)
def c_code(self, node, name, inputs, outputs, sub): def c_code(self, node, name, inputs, outputs, sub):
x, shape = inputs x, shape = inputs
...@@ -2454,6 +2454,7 @@ class GpuReshape(tensor.Reshape, GpuOp): ...@@ -2454,6 +2454,7 @@ class GpuReshape(tensor.Reshape, GpuOp):
assert (PyArray_NDIM(%(shape)s) == 1); assert (PyArray_NDIM(%(shape)s) == 1);
if (PyArray_DIM(%(shape)s, 0) != %(new_ndim)s) if (PyArray_DIM(%(shape)s, 0) != %(new_ndim)s)
{ {
Py_XDECREF(new_shape);
PyErr_Format(PyExc_ValueError, PyErr_Format(PyExc_ValueError,
"GpuReshape: given shape is of incorrect " "GpuReshape: given shape is of incorrect "
"length (%%d should be %%d).", "length (%%d should be %%d).",
...@@ -2470,6 +2471,7 @@ class GpuReshape(tensor.Reshape, GpuOp): ...@@ -2470,6 +2471,7 @@ class GpuReshape(tensor.Reshape, GpuOp):
{ {
if (compute_axis != -1) if (compute_axis != -1)
{ {
Py_XDECREF(new_shape);
PyErr_Format(PyExc_ValueError, PyErr_Format(PyExc_ValueError,
"GpuReshape: only one -1 is accepted " "GpuReshape: only one -1 is accepted "
"in the new shape, but got two at " "in the new shape, but got two at "
...@@ -2519,6 +2521,7 @@ class GpuReshape(tensor.Reshape, GpuOp): ...@@ -2519,6 +2521,7 @@ class GpuReshape(tensor.Reshape, GpuOp):
PyObject *shape_to_py = PyObject_Str(new_shape); PyObject *shape_to_py = PyObject_Str(new_shape);
const char *shape_to = PyString_AsString(shape_to_py); const char *shape_to = PyString_AsString(shape_to_py);
Py_XDECREF(new_shape);
PyErr_Format(PyExc_ValueError, PyErr_Format(PyExc_ValueError,
"GpuReshape: cannot reshape input of shape " "GpuReshape: cannot reshape input of shape "
"%%s to shape %%s.", shape_from, shape_to); "%%s to shape %%s.", shape_from, shape_to);
...@@ -2527,6 +2530,7 @@ class GpuReshape(tensor.Reshape, GpuOp): ...@@ -2527,6 +2530,7 @@ class GpuReshape(tensor.Reshape, GpuOp):
Py_XDECREF(%(output)s); Py_XDECREF(%(output)s);
%(output)s = (CudaNdarray*) CudaNdarray_Reshape(%(x)s, new_shape); %(output)s = (CudaNdarray*) CudaNdarray_Reshape(%(x)s, new_shape);
Py_XDECREF(new_shape);
if (%(output)s == NULL) if (%(output)s == NULL)
{ {
%(fail)s; %(fail)s;
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论