---
src/qemu/qemu_driver.c | 28 +++++++++++++++++++++-------
1 file changed, 21 insertions(+), 7 deletions(-)
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 20b54cc..035a51d 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -2360,7 +2360,8 @@ static int qemuDomainSetMemoryFlags(virDomainPtr dom, unsigned long
newmem,
priv = vm->privateData;
qemuDomainObjEnterMonitor(driver, vm);
r = qemuMonitorSetBalloon(priv->mon, newmem);
- qemuDomainObjExitMonitor(driver, vm);
+ if (qemuDomainObjExitMonitorAlive(driver, vm) < 0)
+ goto endjob;
virDomainAuditMemory(vm, vm->def->mem.cur_balloon, newmem,
"update",
r == 1);
if (r < 0)
@@ -2444,7 +2445,8 @@ static int qemuDomainSetMemoryStatsPeriod(virDomainPtr dom, int
period,
qemuDomainObjEnterMonitor(driver, vm);
r = qemuMonitorSetMemoryStatsPeriod(priv->mon, period);
- qemuDomainObjExitMonitor(driver, vm);
+ if (qemuDomainObjExitMonitorAlive(driver, vm) < 0)
+ goto endjob;
if (r < 0) {
virReportError(VIR_ERR_OPERATION_INVALID, "%s",
_("unable to set balloon driver collection
period"));
@@ -4289,6 +4291,11 @@ processNicRxFilterChangedEvent(virQEMUDriverPtr driver,
if (ret < 0)
goto endjob;
+ if (!virDomainObjIsActive(vm)) {
+ VIR_WARN("Domain crashed");
+ goto endjob;
+ }
+
if (virDomainNetGetActualType(def) == VIR_DOMAIN_NET_TYPE_DIRECT) {
if (virNetDevGetRxFilter(def->ifname, &hostFilter)) {
@@ -10293,11 +10300,11 @@ qemuDomainBlockStatsFlags(virDomainPtr dom,
int idx;
int tmp, ret = -1;
virDomainObjPtr vm;
- virDomainDiskDefPtr disk = NULL;
qemuDomainObjPrivatePtr priv;
long long rd_req, rd_bytes, wr_req, wr_bytes, rd_total_times;
long long wr_total_times, flush_req, flush_total_times, errs;
virTypedParameterPtr param;
+ char *diskAlias = NULL;
virCheckFlags(VIR_TYPED_PARAM_STRING_OKAY, -1);
@@ -10326,6 +10333,7 @@ qemuDomainBlockStatsFlags(virDomainPtr dom,
}
if (*nparams != 0) {
+ virDomainDiskDefPtr disk = NULL;
if ((idx = virDomainDiskIndexByName(vm->def, path, false)) < 0) {
virReportError(VIR_ERR_INVALID_ARG,
_("invalid path: %s"), path);
@@ -10339,6 +10347,8 @@ qemuDomainBlockStatsFlags(virDomainPtr dom,
disk->dst);
goto endjob;
}
+ if (VIR_STRDUP(diskAlias, disk->info.alias) < 0)
+ goto endjob;
}
priv = vm->privateData;
@@ -10354,7 +10364,7 @@ qemuDomainBlockStatsFlags(virDomainPtr dom,
}
ret = qemuMonitorGetBlockStatsInfo(priv->mon,
- disk->info.alias,
+ diskAlias,
&rd_req,
&rd_bytes,
&rd_total_times,
@@ -10453,6 +10463,7 @@ qemuDomainBlockStatsFlags(virDomainPtr dom,
cleanup:
if (vm)
virObjectUnlock(vm);
+ VIR_FREE(diskAlias);
return ret;
}
@@ -16973,7 +16984,8 @@ qemuDomainSetBlockIoTune(virDomainPtr dom,
qemuDomainObjEnterMonitor(driver, vm);
ret = qemuMonitorSetBlockIoThrottle(priv->mon, device,
&info, supportMaxOptions);
- qemuDomainObjExitMonitor(driver, vm);
+ if (qemuDomainObjExitMonitorAlive(driver, vm) < 0)
+ goto endjob;
if (ret < 0)
goto endjob;
vm->def->disks[idx]->blkdeviotune = info;
@@ -17270,7 +17282,8 @@ qemuDomainGetDiskErrors(virDomainPtr dom,
qemuDomainObjEnterMonitor(driver, vm);
table = qemuMonitorGetBlockInfo(priv->mon);
- qemuDomainObjExitMonitor(driver, vm);
+ if (qemuDomainObjExitMonitorAlive(driver, vm) < 0)
+ goto endjob;
if (!table)
goto endjob;
@@ -18539,7 +18552,8 @@ qemuDomainGetStatsBlock(virQEMUDriverPtr driver,
qemuDomainObjEnterMonitor(driver, dom);
rc = qemuMonitorGetAllBlockStatsInfo(priv->mon, &stats);
ignore_value(qemuMonitorBlockStatsUpdateCapacity(priv->mon, stats));
- qemuDomainObjExitMonitor(driver, dom);
+ if (qemuDomainObjExitMonitorAlive(driver, dom) < 0)
+ goto cleanup;
if (rc < 0) {
virResetLastError();
--
2.0.4