Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
DISCONTINUED:openSUSE:11.1:Update
xen
20263-libxc-memleak.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 20263-libxc-memleak.patch of Package xen
# HG changeset patch # User Keir Fraser <keir.fraser@citrix.com> # Date 1254296697 -3600 # Node ID 516d7de8e9a1d0470c57df983a45c74338c70326 # Parent c6b22d0d1e90d5cfe608e932096a4adb96b8aa3f 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@redhat.com> Index: xen-3.3.1-testing/tools/python/xen/lowlevel/xc/xc.c =================================================================== --- xen-3.3.1-testing.orig/tools/python/xen/lowlevel/xc/xc.c +++ xen-3.3.1-testing/tools/python/xen/lowlevel/xc/xc.c @@ -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); @@ -1099,22 +1102,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
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor