mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-07-31 22:17:17 +00:00
Fix buzzilla 738778
This patch fixes the bug shown in bugzilla 738778. It's not an nwfilter problem but a connection sharing / closure issue. https://bugzilla.redhat.com/show_bug.cgi?id=738778 Depending on the speed / #CPUs of the machine you are using you may not see this bug all the time.
This commit is contained in:
parent
b996110285
commit
3f2cb3ab59
@ -2539,6 +2539,10 @@ struct qemuProcessReconnectData {
|
|||||||
/*
|
/*
|
||||||
* Open an existing VM's monitor, re-detect VCPU threads
|
* Open an existing VM's monitor, re-detect VCPU threads
|
||||||
* and re-reserve the security labels in use
|
* and re-reserve the security labels in use
|
||||||
|
*
|
||||||
|
* We own the virConnectPtr we are passed here - whoever started
|
||||||
|
* this thread function has increased the reference counter to it
|
||||||
|
* so that we now have to close it.
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
qemuProcessReconnect(void *opaque)
|
qemuProcessReconnect(void *opaque)
|
||||||
@ -2632,6 +2636,8 @@ qemuProcessReconnect(void *opaque)
|
|||||||
|
|
||||||
qemuDriverUnlock(driver);
|
qemuDriverUnlock(driver);
|
||||||
|
|
||||||
|
virConnectClose(conn);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
error:
|
error:
|
||||||
@ -2656,6 +2662,8 @@ error:
|
|||||||
virDomainObjUnlock(obj);
|
virDomainObjUnlock(obj);
|
||||||
}
|
}
|
||||||
qemuDriverUnlock(driver);
|
qemuDriverUnlock(driver);
|
||||||
|
|
||||||
|
virConnectClose(conn);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -2706,7 +2714,16 @@ qemuProcessReconnectHelper(void *payload,
|
|||||||
if (qemuDomainObjBeginJobWithDriver(src->driver, obj, QEMU_JOB_MODIFY) < 0)
|
if (qemuDomainObjBeginJobWithDriver(src->driver, obj, QEMU_JOB_MODIFY) < 0)
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
|
/* Since we close the connection later on, we have to make sure
|
||||||
|
* that the threads we start see a valid connection throughout their
|
||||||
|
* lifetime. We simply increase the reference counter here.
|
||||||
|
*/
|
||||||
|
virConnectRef(data->conn);
|
||||||
|
|
||||||
if (virThreadCreate(&thread, true, qemuProcessReconnect, data) < 0) {
|
if (virThreadCreate(&thread, true, qemuProcessReconnect, data) < 0) {
|
||||||
|
|
||||||
|
virConnectClose(data->conn);
|
||||||
|
|
||||||
qemuReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
qemuReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||||
_("Could not create thread. QEMU initialization "
|
_("Could not create thread. QEMU initialization "
|
||||||
"might be incomplete"));
|
"might be incomplete"));
|
||||||
|
Loading…
Reference in New Issue
Block a user