virReportOOMError();
goto error;
}
-
- qemuDomainObjEnterMonitorWithDriver(driver, vm);
- if (qemuMonitorSendFileHandle(priv->mon, configfd_name,
- configfd) < 0) {
- qemuDomainObjExitMonitorWithDriver(driver, vm);
- goto error;
- }
- qemuDomainObjExitMonitorWithDriver(driver, vm);
}
}
goto error;
qemuDomainObjEnterMonitorWithDriver(driver, vm);
- ret = qemuMonitorAddDevice(priv->mon, devstr);
+ ret = qemuMonitorAddDeviceWithFd(priv->mon, devstr,
+ configfd, configfd_name);
qemuDomainObjExitMonitorWithDriver(driver, vm);
} else {
virDomainDevicePCIAddress guestAddr;
}
-int qemuMonitorAddDevice(qemuMonitorPtr mon,
- const char *devicestr)
+int qemuMonitorAddDeviceWithFd(qemuMonitorPtr mon,
+ const char *devicestr,
+ int fd,
+ const char *fdname)
{
- VIR_DEBUG("mon=%p device=%s", mon, devicestr);
+ VIR_DEBUG("mon=%p device=%s fd=%d fdname=%s", mon, devicestr, fd,
+ NULLSTR(fdname));
int ret;
if (!mon) {
return -1;
}
+ if (fd >= 0 && qemuMonitorSendFileHandle(mon, fdname, fd) < 0)
+ return -1;
+
if (mon->json)
ret = qemuMonitorJSONAddDevice(mon, devicestr);
else
ret = qemuMonitorTextAddDevice(mon, devicestr);
+
+ if (ret < 0 && fd >= 0) {
+ if (qemuMonitorCloseFileHandle(mon, fdname) < 0)
+ VIR_WARN("failed to close device handle '%s'", fdname);
+ }
+
return ret;
}
+int qemuMonitorAddDevice(qemuMonitorPtr mon,
+ const char *devicestr)
+{
+ return qemuMonitorAddDeviceWithFd(mon, devicestr, -1, NULL);
+}
+
int qemuMonitorAddDrive(qemuMonitorPtr mon,
const char *drivestr)
{
int qemuMonitorAddDevice(qemuMonitorPtr mon,
const char *devicestr);
+int qemuMonitorAddDeviceWithFd(qemuMonitorPtr mon,
+ const char *devicestr,
+ int fd,
+ const char *fdname);
+
int qemuMonitorDelDevice(qemuMonitorPtr mon,
const char *devalias);