summaryrefslogtreecommitdiff
path: root/psutil/_psutil_sunos.c
diff options
context:
space:
mode:
authorGiampaolo Rodola <g.rodola@gmail.com>2017-05-02 06:03:35 +0200
committerGiampaolo Rodola <g.rodola@gmail.com>2017-05-02 06:03:35 +0200
commit85744f6db64f388ad2d2ceffcf3004d3372ca581 (patch)
tree82ca139cf829b023848d158f7a8893b2c85714c3 /psutil/_psutil_sunos.c
parent986fb8aeb82013bf9e18a0c006138f7d3032dfb7 (diff)
downloadpsutil-85744f6db64f388ad2d2ceffcf3004d3372ca581.tar.gz
fix memleak
Diffstat (limited to 'psutil/_psutil_sunos.c')
-rw-r--r--psutil/_psutil_sunos.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/psutil/_psutil_sunos.c b/psutil/_psutil_sunos.c
index 8e783d59..c205a3ac 100644
--- a/psutil/_psutil_sunos.c
+++ b/psutil/_psutil_sunos.c
@@ -123,6 +123,7 @@ psutil_proc_name_and_args(PyObject *self, PyObject *args) {
const char *procfs_path;
PyObject *py_name;
PyObject *py_args;
+ PyObject *py_retlist;
if (! PyArg_ParseTuple(args, "is", &pid, &procfs_path))
return NULL;
@@ -130,18 +131,23 @@ psutil_proc_name_and_args(PyObject *self, PyObject *args) {
if (! psutil_file_to_struct(path, (void *)&info, sizeof(info)))
return NULL;
- // TODO: probably have to Py_INCREF here.
py_name = PyUnicode_DecodeFSDefault(info.pr_fname);
if (!py_name)
goto error;
py_args = PyUnicode_DecodeFSDefault(info.pr_psargs);
if (!py_args)
goto error;
- return Py_BuildValue("OO", py_name, py_args);
+ py_retlist = Py_BuildValue("OO", py_name, py_args);
+ if (!py_retlist)
+ goto error;
+ Py_DECREF(py_name);
+ Py_DECREF(py_args);
+ return py_retlist;
error:
Py_XDECREF(py_name);
Py_XDECREF(py_args);
+ Py_XDECREF(py_retlist);
return NULL;
}