From: Adam Litke Date: Mon, 8 Mar 2010 14:15:44 +0000 (+0100) Subject: Fix locking in qemudDomainMemoryStats X-Git-Tag: v0.8.0~335 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=5140a2f626c34a2c55f776c283ceb95b6a48c788;p=thirdparty%2Flibvirt.git Fix locking in qemudDomainMemoryStats When adding domainMemoryStats API support for the qemu driver, I didn't follow the locking rules exactly. The job condition must be held when executing monitor commands. This corrects the segfaults I was seeing when calling domainMemoryStats in a multi-threaded environment. * src/qemu/qemu_driver.c: in qemudDomainMemoryStats() add missing calls to qemuDomainObjBeginJob/qemuDomainObjEndJob --- diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 02068c46ed..57f3b2cb58 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -7708,6 +7708,9 @@ qemudDomainMemoryStats (virDomainPtr dom, goto cleanup; } + if (qemuDomainObjBeginJob(vm) < 0) + goto cleanup; + if (virDomainObjIsActive(vm)) { qemuDomainObjPrivatePtr priv = vm->privateData; qemuDomainObjEnterMonitor(vm); @@ -7718,6 +7721,9 @@ qemudDomainMemoryStats (virDomainPtr dom, "%s", _("domain is not running")); } + if (qemuDomainObjEndJob(vm) == 0) + vm = NULL; + cleanup: if (vm) virDomainObjUnlock(vm);