python/xc: add missing Py_DECREF() to fix a memory leak
authorZhigang Wang <zhigang.x.wang@oracle.com>
Fri, 28 Aug 2015 21:35:18 +0000 (17:35 -0400)
committerIan Campbell <ian.campbell@citrix.com>
Tue, 1 Sep 2015 11:05:19 +0000 (12:05 +0100)
Python PyList_Append() will increase reference count of the item. We have to
decrease its reference count to let it garbage collected.

We missed the Py_DECREF() for 'cpuinfo_obj' here, thus we have a memory leak.

The memory leak could be easily confirmed by:

  # python
  >>> import xen.lowlevel.xc
  >>> xc = xen.lowlevel.xc.xc()
  >>> for i in range(1000): xc.getcpuinfo(1)

And check the python process memory usage before and after:

  # ps f -o vsize,rss,%mem,size,cmd -p <pid>

Signed-off-by: Zhigang Wang <zhigang.x.wang@oracle.com>
Acked-by: Wei Liu <wei.liu2@citrix.com>
tools/python/xen/lowlevel/xc/xc.c

index 2c36eb2eb27fc3e91cd043b46850044b9c4488d2..9a161d3ab66d8073aaf5dcdf18ada5b6b833f2ce 100644 (file)
@@ -1210,6 +1210,7 @@ static PyObject *pyxc_getcpuinfo(XcObject *self, PyObject *args, PyObject *kwds)
     for (i = 0; i < nr_cpus; i++) {
         cpuinfo_obj = Py_BuildValue("{s:k}", "idletime", cpuinfo_ptr->idletime);
         PyList_Append(cpuinfo_list_obj, cpuinfo_obj);
+        Py_DECREF(cpuinfo_obj);
         cpuinfo_ptr++;
     }