From e9c4e2abffef007a28112ebb40a9586b0128f10b Mon Sep 17 00:00:00 2001 From: Pavel Hrdina Date: Mon, 18 Apr 2016 16:53:50 +0200 Subject: fix crash in getAllDomainStats Commits 1d39dbaf and 827ed9b4 broke the libvirt-python API by removing virDomainRef() and virDomainFree(). virDomainStatsRecordListFree() will free that domain pointer and later when virDomain (python object) call its destructor and tries to free that same pointer again. Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1326839 Signed-off-by: Pavel Hrdina --- libvirt-override.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/libvirt-override.c b/libvirt-override.c index 4640ed5..2de95ce 100644 --- a/libvirt-override.c +++ b/libvirt-override.c @@ -8381,6 +8381,7 @@ convertDomainStatsRecord(virDomainStatsRecordPtr *records, PyObject *py_retval; PyObject *py_record; PyObject *py_record_stats = NULL; + virDomainPtr dom = NULL; size_t i; if (!(py_retval = PyList_New(nrecords))) @@ -8392,9 +8393,12 @@ convertDomainStatsRecord(virDomainStatsRecordPtr *records, VIR_PY_LIST_SET_GOTO(py_retval, i, py_record, error); + dom = records[i]->dom; + virDomainRef(dom); VIR_PY_TUPLE_SET_GOTO(py_record, 0, - libvirt_virDomainPtrWrap(records[i]->dom), + libvirt_virDomainPtrWrap(dom), error); + dom = NULL; if (!(py_record_stats = getPyVirTypedParameter(records[i]->params, records[i]->nparams))) @@ -8406,6 +8410,8 @@ convertDomainStatsRecord(virDomainStatsRecordPtr *records, return py_retval; error: + if (dom) + virDomainFree(dom); Py_XDECREF(py_retval); return NULL; } -- cgit v1.2.1