diff --git a/paddle/fluid/pybind/eager_method.cc b/paddle/fluid/pybind/eager_method.cc index 4d7b80a4e8c966bf64bc10d60dbb15ecf21c8ed4..1a0838d7f47c627a35f090b8248c12783ff20ac7 100644 --- a/paddle/fluid/pybind/eager_method.cc +++ b/paddle/fluid/pybind/eager_method.cc @@ -77,7 +77,9 @@ class PyTensorHook : public egr::TensorHook { PyObject* res = nullptr; try { - res = PyObject_CallFunctionObjArgs(py_func_, ToPyObject(var), nullptr); + PyObject* p_tmp_var = ToPyObject(var); + res = PyObject_CallFunctionObjArgs(py_func_, p_tmp_var, nullptr); + Py_DECREF(p_tmp_var); } catch (platform::EnforceNotMet& e) { throw std::move(e); } catch (std::exception& e) { @@ -94,7 +96,9 @@ class PyTensorHook : public egr::TensorHook { if (res == Py_None) { return var; } - return reinterpret_cast(res)->tensor; + auto res_tensor = reinterpret_cast(res)->tensor; + Py_DECREF(res); + return res_tensor; } private: