}
qemuDomainMarkDeviceForRemoval(vm, &shmem->info);
- qemuDomainObjEnterMonitor(driver, vm);
-
- ret = qemuMonitorDelDevice(priv->mon, shmem->info.alias);
+ qemuDomainObjEnterMonitor(driver, vm);
+ if (qemuMonitorDelDevice(priv->mon, shmem->info.alias) < 0) {
+ ignore_value(qemuDomainObjExitMonitor(driver, vm));
+ goto cleanup;
+ }
if (qemuDomainObjExitMonitor(driver, vm) < 0)
- ret = -1;
+ goto cleanup;
- if (ret == 0) {
- if ((ret = qemuDomainWaitForDeviceRemoval(vm)) == 1)
- ret = qemuDomainRemoveShmemDevice(driver, vm, shmem);
- }
- qemuDomainResetDeviceRemoval(vm);
+ if ((ret = qemuDomainWaitForDeviceRemoval(vm)) == 1)
+ ret = qemuDomainRemoveShmemDevice(driver, vm, shmem);
+ cleanup:
+ qemuDomainResetDeviceRemoval(vm);
return ret;
}
}
qemuDomainMarkDeviceForRemoval(vm, &watchdog->info);
- qemuDomainObjEnterMonitor(driver, vm);
-
- ret = qemuMonitorDelDevice(priv->mon, watchdog->info.alias);
+ qemuDomainObjEnterMonitor(driver, vm);
+ if (qemuMonitorDelDevice(priv->mon, watchdog->info.alias) < 0) {
+ ignore_value(qemuDomainObjExitMonitor(driver, vm));
+ goto cleanup;
+ }
if (qemuDomainObjExitMonitor(driver, vm) < 0)
- ret = -1;
+ goto cleanup;
- if (ret == 0) {
- if ((ret = qemuDomainWaitForDeviceRemoval(vm)) == 1)
- ret = qemuDomainRemoveWatchdog(driver, vm, watchdog);
- }
- qemuDomainResetDeviceRemoval(vm);
+ if ((ret = qemuDomainWaitForDeviceRemoval(vm)) == 1)
+ ret = qemuDomainRemoveWatchdog(driver, vm, watchdog);
+ cleanup:
+ qemuDomainResetDeviceRemoval(vm);
return ret;
}