[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-3.4-testing] xend: Fix memory leaks in libxc python bindings
# HG changeset patch # User Keir Fraser <keir.fraser@xxxxxxxxxx> # Date 1254410147 -3600 # Node ID d234358df883240ad93598b16b8ca4c3198a0a54 # Parent d1725e7a66b2fa42d8a502e9d0d876afeb5bbaf8 xend: Fix memory leaks in libxc python bindings Reference counters are not correctly decreased for python object in several places in python bindings for libxc. Most of them are around PyList_Append(), which unlike PyList_SetItem() does increment reference counter of the object being added to a list. Signed-off-by: Jiri Denemark <jdenemar@xxxxxxxxxx> xen-unstable changeset: 20263:516d7de8e9a1 xen-unstable date: Wed Sep 30 08:44:57 2009 +0100 --- tools/python/xen/lowlevel/xc/xc.c | 24 ++++++++++++++++++------ 1 files changed, 18 insertions(+), 6 deletions(-) diff -r d1725e7a66b2 -r d234358df883 tools/python/xen/lowlevel/xc/xc.c --- a/tools/python/xen/lowlevel/xc/xc.c Thu Oct 01 16:15:12 2009 +0100 +++ b/tools/python/xen/lowlevel/xc/xc.c Thu Oct 01 16:15:47 2009 +0100 @@ -386,8 +386,11 @@ static PyObject *pyxc_vcpu_getinfo(XcObj cpulist = PyList_New(0); for ( i = 0; cpumap != 0; i++ ) { - if ( cpumap & 1 ) - PyList_Append(cpulist, PyInt_FromLong(i)); + if ( cpumap & 1 ) { + PyObject *pyint = PyInt_FromLong(i); + PyList_Append(cpulist, pyint); + Py_DECREF(pyint); + } cpumap >>= 1; } PyDict_SetItemString(info_dict, "cpumap", cpulist); @@ -1100,22 +1103,31 @@ static PyObject *pyxc_physinfo(XcObject { PyObject *cpus = PyList_New(0); for ( j = 0; j <= max_cpu_id; j++ ) - if ( i == map[j]) - PyList_Append(cpus, PyInt_FromLong(j)); + if ( i == map[j]) { + PyObject *pyint = PyInt_FromLong(j); + PyList_Append(cpus, pyint); + Py_DECREF(pyint); + } PyList_Append(node_to_cpu_obj, cpus); + Py_DECREF(cpus); } node_to_memory_obj = PyList_New(0); for ( i = 0; i < info.nr_nodes; i++ ) { + PyObject *pyint; + xc_availheap(self->xc_handle, 0, 0, i, &free_heap); - PyList_Append(node_to_memory_obj, - PyInt_FromLong(free_heap / 1024)); + pyint = PyInt_FromLong(free_heap / 1024); + PyList_Append(node_to_memory_obj, pyint); + Py_DECREF(pyint); } PyDict_SetItemString(ret_obj, "node_to_cpu", node_to_cpu_obj); + Py_DECREF(node_to_cpu_obj); PyDict_SetItemString(ret_obj, "node_to_memory", node_to_memory_obj); + Py_DECREF(node_to_memory_obj); return ret_obj; #undef MAX_CPU_ID _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |