From: Daniel P. Berrange Date: Wed, 27 Feb 2013 16:23:16 +0000 (+0000) Subject: Fix autodestroy of QEMU guests X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=b4a124efc328ac221ff4e8a6fde3a1a0c0202d68;p=libvirt.git Fix autodestroy of QEMU guests The virQEMUCloseCallbacksRunOne method was passing a uuid string to virDomainObjListFindByUUID, when it actually expected to get a raw uuid buffer. This was not caught by the compiler because the method was using a 'void *uuid' instead of first casting it to the expected type. This regression was accidentally caused by refactoring in commit 568a6cda277f04ab9baaeb97490e548b7b608aa6 Author: Jiri Denemark Date: Fri Feb 15 15:11:47 2013 +0100 qemu: Avoid deadlock in autodestroy Signed-off-by: Daniel P. Berrange --- diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c index 4f0cb187eb..1cd4b7c653 100644 --- a/src/qemu/qemu_conf.c +++ b/src/qemu/qemu_conf.c @@ -805,22 +805,26 @@ struct virQEMUCloseCallbacksData { static void virQEMUCloseCallbacksRunOne(void *payload, - const void *uuid, + const void *key, void *opaque) { struct virQEMUCloseCallbacksData *data = opaque; qemuDriverCloseDefPtr closeDef = payload; virDomainObjPtr dom; + const char *uuidstr = key; + unsigned char uuid[VIR_UUID_BUFLEN]; + + if (virUUIDParse(uuidstr, uuid) < 0) + return; VIR_DEBUG("conn=%p, thisconn=%p, uuid=%s, cb=%p", - closeDef->conn, data->conn, (const char *) uuid, closeDef->cb); + closeDef->conn, data->conn, uuidstr, closeDef->cb); if (data->conn != closeDef->conn || !closeDef->cb) return; if (!(dom = virDomainObjListFindByUUID(data->driver->domains, uuid))) { - VIR_DEBUG("No domain object with UUID %s", - (const char *) uuid); + VIR_DEBUG("No domain object with UUID %s", uuidstr); return; }