summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPavel Hrdina <phrdina@redhat.com>2016-04-18 16:53:50 +0200
committerPavel Hrdina <phrdina@redhat.com>2016-04-18 17:06:37 +0200
commite9c4e2abffef007a28112ebb40a9586b0128f10b (patch)
tree12ea3f9dc5bc9dd7f1f9cd6feb01c7279b5a7991
parent1233645a280a70c45769f3041f2b773d51ce593c (diff)
downloadlibvirt-python-e9c4e2abffef007a28112ebb40a9586b0128f10b.tar.gz
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 <phrdina@redhat.com>
-rw-r--r--libvirt-override.c8
1 files changed, 7 insertions, 1 deletions
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;
}