mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-23 06:05:27 +00:00
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 568a6cda27
Author: Jiri Denemark <jdenemar@redhat.com>
Date: Fri Feb 15 15:11:47 2013 +0100
qemu: Avoid deadlock in autodestroy
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
This commit is contained in:
parent
25dc8ba08b
commit
b4a124efc3
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user