[libvirt PATCH 0/6] Fix and refactor QMP event processing

Jiri Denemark (6): qemu: Avoid unlocked access to vm object in monitor callbacks qemu: Pass arguments to qemuProcessEventSubmit directly qemu: Make vm parameter of qemuProcessEventSubmit mandatory qemu: Drop driver parameter from qemuProcessEventSubmit qemu: Do not use opaque pointer in QEMU monitor callbacks qemu: Do not pass unused opaque pointer to monitor callbacks src/qemu/qemu_monitor.c | 16 +- src/qemu/qemu_monitor.h | 108 ++++------ src/qemu/qemu_monitor_priv.h | 1 - src/qemu/qemu_process.c | 384 +++++++++++++---------------------- src/qemu/qemu_processpriv.h | 3 +- tests/qemuhotplugtest.c | 3 +- tests/qemumonitortestutils.c | 15 +- tests/qemumonitortestutils.h | 5 +- 8 files changed, 191 insertions(+), 344 deletions(-) -- 2.35.1

Signed-off-by: Jiri Denemark <jdenemar@redhat.com> --- src/qemu/qemu_process.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 033d3d5bc6..33c3edb9cc 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -145,9 +145,8 @@ qemuProcessHandleAgentEOF(qemuAgent *agent, { qemuDomainObjPrivate *priv; - VIR_DEBUG("Received EOF from agent on %p '%s'", vm, vm->def->name); - virObjectLock(vm); + VIR_DEBUG("Received EOF from agent on %p '%s'", vm, vm->def->name); priv = vm->privateData; @@ -186,9 +185,8 @@ qemuProcessHandleAgentError(qemuAgent *agent G_GNUC_UNUSED, { qemuDomainObjPrivate *priv; - VIR_DEBUG("Received error from agent on %p '%s'", vm, vm->def->name); - virObjectLock(vm); + VIR_DEBUG("Received error from agent on %p '%s'", vm, vm->def->name); priv = vm->privateData; @@ -353,9 +351,8 @@ qemuProcessHandleMonitorError(qemuMonitor *mon G_GNUC_UNUSED, virQEMUDriver *driver = opaque; virObjectEvent *event = NULL; - VIR_DEBUG("Received error on %p '%s'", vm, vm->def->name); - virObjectLock(vm); + VIR_DEBUG("Received error on %p '%s'", vm, vm->def->name); ((qemuDomainObjPrivate *) vm->privateData)->monError = true; event = virDomainEventControlErrorNewFromObj(vm); @@ -1773,6 +1770,8 @@ qemuProcessHandleMemoryFailure(qemuMonitor *mon G_GNUC_UNUSED, virDomainMemoryFailureActionType action; unsigned int flags = 0; + virObjectLock(vm); + switch (mfp->recipient) { case QEMU_MONITOR_MEMORY_FAILURE_RECIPIENT_HYPERVISOR: recipient = VIR_DOMAIN_EVENT_MEMORY_FAILURE_RECIPIENT_HYPERVISOR; @@ -1809,6 +1808,9 @@ qemuProcessHandleMemoryFailure(qemuMonitor *mon G_GNUC_UNUSED, flags |= VIR_DOMAIN_MEMORY_FAILURE_RECURSIVE; event = virDomainEventMemoryFailureNewFromObj(vm, recipient, action, flags); + + virObjectUnlock(vm); + virObjectEventStateQueue(driver->domainEventState, event); } -- 2.35.1

Allocating and filling qemuProcessEvent structure is a repeated pattern before all calls to qemuProcessEventSubmit. We can move the allocation inside this function and let callers pass all arguments directly. Signed-off-by: Jiri Denemark <jdenemar@redhat.com> --- src/qemu/qemu_process.c | 188 +++++++++++----------------------------- 1 file changed, 50 insertions(+), 138 deletions(-) diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 33c3edb9cc..44a4bcfd74 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -265,27 +265,37 @@ qemuConnectAgent(virQEMUDriver *driver, virDomainObj *vm) /** * qemuProcessEventSubmit: * @driver: QEMU driver object - * @event: pointer to the variable holding the event processing data (stolen and cleared) + * @vm: pointer to the domain object, the function will take an extra reference + * @eventType: the event to be processed + * @action: event specific action to be taken + * @status: event specific status + * @data: additional data for the event processor (the pointer is stolen and it + * will be properly freed * - * Submits @event to be processed by the asynchronous event handling thread. - * In case when submission of the handling fails @event is properly freed and - * cleared. If (*event)->vm is non-NULL the domain object is uref'd before freeing - * @event. + * Submits @eventType to be processed by the asynchronous event handling thread. */ static void qemuProcessEventSubmit(virQEMUDriver *driver, - struct qemuProcessEvent **event) -{ - if (!*event) - return; - - if (virThreadPoolSendJob(driver->workerPool, 0, *event) < 0) { - if ((*event)->vm) - virObjectUnref((*event)->vm); - qemuProcessEventFree(*event); + virDomainObj *vm, + qemuProcessEventType eventType, + int action, + int status, + void *data) +{ + struct qemuProcessEvent *event = g_new0(struct qemuProcessEvent, 1); + + if (vm) + event->vm = virObjectRef(vm); + event->eventType = eventType; + event->action = action; + event->status = status; + event->data = data; + + if (virThreadPoolSendJob(driver->workerPool, 0, event) < 0) { + if (vm) + virObjectUnref(vm); + qemuProcessEventFree(event); } - - *event = NULL; } @@ -302,7 +312,6 @@ qemuProcessHandleMonitorEOF(qemuMonitor *mon, { virQEMUDriver *driver = opaque; qemuDomainObjPrivate *priv; - struct qemuProcessEvent *processEvent; virObjectLock(vm); @@ -314,12 +323,8 @@ qemuProcessHandleMonitorEOF(qemuMonitor *mon, goto cleanup; } - processEvent = g_new0(struct qemuProcessEvent, 1); - - processEvent->eventType = QEMU_PROCESS_EVENT_MONITOR_EOF; - processEvent->vm = virObjectRef(vm); - - qemuProcessEventSubmit(driver, &processEvent); + qemuProcessEventSubmit(driver, vm, QEMU_PROCESS_EVENT_MONITOR_EOF, + 0, 0, NULL); /* We don't want this EOF handler to be called over and over while the * thread is waiting for a job. @@ -795,17 +800,8 @@ qemuProcessHandleWatchdog(qemuMonitor *mon G_GNUC_UNUSED, } if (vm->def->watchdog->action == VIR_DOMAIN_WATCHDOG_ACTION_DUMP) { - struct qemuProcessEvent *processEvent; - processEvent = g_new0(struct qemuProcessEvent, 1); - - processEvent->eventType = QEMU_PROCESS_EVENT_WATCHDOG; - processEvent->action = VIR_DOMAIN_WATCHDOG_ACTION_DUMP; - /* Hold an extra reference because we can't allow 'vm' to be - * deleted before handling watchdog event is finished. - */ - processEvent->vm = virObjectRef(vm); - - qemuProcessEventSubmit(driver, &processEvent); + qemuProcessEventSubmit(driver, vm, QEMU_PROCESS_EVENT_WATCHDOG, + VIR_DOMAIN_WATCHDOG_ACTION_DUMP, 0, NULL); } virObjectUnlock(vm); @@ -891,10 +887,8 @@ qemuProcessHandleBlockJob(qemuMonitor *mon G_GNUC_UNUSED, void *opaque) { qemuDomainObjPrivate *priv; - virQEMUDriver *driver = opaque; virDomainDiskDef *disk; g_autoptr(qemuBlockJobData) job = NULL; - char *data = NULL; virObjectLock(vm); @@ -920,16 +914,8 @@ qemuProcessHandleBlockJob(qemuMonitor *mon G_GNUC_UNUSED, virDomainObjBroadcast(vm); } else { /* there is no waiting SYNC API, dispatch the update to a thread */ - struct qemuProcessEvent *processEvent = g_new0(struct qemuProcessEvent, 1); - - processEvent->eventType = QEMU_PROCESS_EVENT_BLOCK_JOB; - data = g_strdup(diskAlias); - processEvent->data = data; - processEvent->vm = virObjectRef(vm); - processEvent->action = type; - processEvent->status = status; - - qemuProcessEventSubmit(driver, &processEvent); + qemuProcessEventSubmit(opaque, vm, QEMU_PROCESS_EVENT_BLOCK_JOB, + type, status, g_strdup(diskAlias)); } cleanup: @@ -944,7 +930,6 @@ qemuProcessHandleJobStatusChange(qemuMonitor *mon G_GNUC_UNUSED, int status, void *opaque) { - virQEMUDriver *driver = opaque; qemuDomainObjPrivate *priv; qemuBlockJobData *job = NULL; int jobnewstate; @@ -975,15 +960,9 @@ qemuProcessHandleJobStatusChange(qemuMonitor *mon G_GNUC_UNUSED, VIR_DEBUG("job '%s' handled synchronously", jobname); virDomainObjBroadcast(vm); } else { - struct qemuProcessEvent *processEvent = g_new0(struct qemuProcessEvent, 1); - VIR_DEBUG("job '%s' handled by event thread", jobname); - - processEvent->eventType = QEMU_PROCESS_EVENT_JOB_STATUS_CHANGE; - processEvent->vm = virObjectRef(vm); - processEvent->data = virObjectRef(job); - - qemuProcessEventSubmit(driver, &processEvent); + qemuProcessEventSubmit(opaque, vm, QEMU_PROCESS_EVENT_JOB_STATUS_CHANGE, + 0, 0, virObjectRef(job)); } cleanup: @@ -1217,21 +1196,10 @@ qemuProcessHandleGuestPanic(qemuMonitor *mon G_GNUC_UNUSED, qemuMonitorEventPanicInfo *info, void *opaque) { - virQEMUDriver *driver = opaque; - struct qemuProcessEvent *processEvent; - virObjectLock(vm); - processEvent = g_new0(struct qemuProcessEvent, 1); - processEvent->eventType = QEMU_PROCESS_EVENT_GUESTPANIC; - processEvent->action = vm->def->onCrash; - processEvent->data = info; - /* Hold an extra reference because we can't allow 'vm' to be - * deleted before handling guest panic event is finished. - */ - processEvent->vm = virObjectRef(vm); - - qemuProcessEventSubmit(driver, &processEvent); + qemuProcessEventSubmit(opaque, vm, QEMU_PROCESS_EVENT_GUESTPANIC, + vm->def->onCrash, 0, info); virObjectUnlock(vm); } @@ -1243,10 +1211,6 @@ qemuProcessHandleDeviceDeleted(qemuMonitor *mon G_GNUC_UNUSED, const char *devAlias, void *opaque) { - virQEMUDriver *driver = opaque; - struct qemuProcessEvent *processEvent = NULL; - char *data; - virObjectLock(vm); VIR_DEBUG("Device %s removed from domain %p %s", @@ -1256,14 +1220,8 @@ qemuProcessHandleDeviceDeleted(qemuMonitor *mon G_GNUC_UNUSED, QEMU_DOMAIN_UNPLUGGING_DEVICE_STATUS_OK)) goto cleanup; - processEvent = g_new0(struct qemuProcessEvent, 1); - - processEvent->eventType = QEMU_PROCESS_EVENT_DEVICE_DELETED; - data = g_strdup(devAlias); - processEvent->data = data; - processEvent->vm = virObjectRef(vm); - - qemuProcessEventSubmit(driver, &processEvent); + qemuProcessEventSubmit(opaque, vm, QEMU_PROCESS_EVENT_DEVICE_DELETED, + 0, 0, g_strdup(devAlias)); cleanup: virObjectUnlock(vm); @@ -1456,23 +1414,13 @@ qemuProcessHandleNicRxFilterChanged(qemuMonitor *mon G_GNUC_UNUSED, const char *devAlias, void *opaque) { - virQEMUDriver *driver = opaque; - struct qemuProcessEvent *processEvent = NULL; - char *data; - virObjectLock(vm); VIR_DEBUG("Device %s RX Filter changed in domain %p %s", devAlias, vm, vm->def->name); - processEvent = g_new0(struct qemuProcessEvent, 1); - - processEvent->eventType = QEMU_PROCESS_EVENT_NIC_RX_FILTER_CHANGED; - data = g_strdup(devAlias); - processEvent->data = data; - processEvent->vm = virObjectRef(vm); - - qemuProcessEventSubmit(driver, &processEvent); + qemuProcessEventSubmit(opaque, vm, QEMU_PROCESS_EVENT_NIC_RX_FILTER_CHANGED, + 0, 0, g_strdup(devAlias)); virObjectUnlock(vm); } @@ -1485,24 +1433,13 @@ qemuProcessHandleSerialChanged(qemuMonitor *mon G_GNUC_UNUSED, bool connected, void *opaque) { - virQEMUDriver *driver = opaque; - struct qemuProcessEvent *processEvent = NULL; - char *data; - virObjectLock(vm); VIR_DEBUG("Serial port %s state changed to '%d' in domain %p %s", devAlias, connected, vm, vm->def->name); - processEvent = g_new0(struct qemuProcessEvent, 1); - - processEvent->eventType = QEMU_PROCESS_EVENT_SERIAL_CHANGED; - data = g_strdup(devAlias); - processEvent->data = data; - processEvent->action = connected; - processEvent->vm = virObjectRef(vm); - - qemuProcessEventSubmit(driver, &processEvent); + qemuProcessEventSubmit(opaque, vm, QEMU_PROCESS_EVENT_SERIAL_CHANGED, + connected, 0, g_strdup(devAlias)); virObjectUnlock(vm); } @@ -1663,9 +1600,7 @@ qemuProcessHandlePRManagerStatusChanged(qemuMonitor *mon G_GNUC_UNUSED, bool connected, void *opaque) { - virQEMUDriver *driver = opaque; qemuDomainObjPrivate *priv; - struct qemuProcessEvent *processEvent = NULL; const char *managedAlias = qemuDomainGetManagedPRAlias(); virObjectLock(vm); @@ -1688,12 +1623,8 @@ qemuProcessHandlePRManagerStatusChanged(qemuMonitor *mon G_GNUC_UNUSED, priv = vm->privateData; priv->prDaemonRunning = false; - processEvent = g_new0(struct qemuProcessEvent, 1); - - processEvent->eventType = QEMU_PROCESS_EVENT_PR_DISCONNECT; - processEvent->vm = virObjectRef(vm); - - qemuProcessEventSubmit(driver, &processEvent); + qemuProcessEventSubmit(opaque, vm, QEMU_PROCESS_EVENT_PR_DISCONNECT, + 0, 0, NULL); cleanup: virObjectUnlock(vm); @@ -1709,8 +1640,6 @@ qemuProcessHandleRdmaGidStatusChanged(qemuMonitor *mon G_GNUC_UNUSED, unsigned long long interface_id, void *opaque) { - virQEMUDriver *driver = opaque; - struct qemuProcessEvent *processEvent = NULL; qemuMonitorRdmaGidStatus *info = NULL; virObjectLock(vm); @@ -1726,13 +1655,8 @@ qemuProcessHandleRdmaGidStatusChanged(qemuMonitor *mon G_GNUC_UNUSED, info->subnet_prefix = subnet_prefix; info->interface_id = interface_id; - processEvent = g_new0(struct qemuProcessEvent, 1); - - processEvent->eventType = QEMU_PROCESS_EVENT_RDMA_GID_STATUS_CHANGED; - processEvent->vm = virObjectRef(vm); - processEvent->data = g_steal_pointer(&info); - - qemuProcessEventSubmit(driver, &processEvent); + qemuProcessEventSubmit(opaque, vm, QEMU_PROCESS_EVENT_RDMA_GID_STATUS_CHANGED, + 0, 0, info); virObjectUnlock(vm); } @@ -1743,16 +1667,10 @@ qemuProcessHandleGuestCrashloaded(qemuMonitor *mon G_GNUC_UNUSED, virDomainObj *vm, void *opaque) { - virQEMUDriver *driver = opaque; - struct qemuProcessEvent *processEvent; - virObjectLock(vm); - processEvent = g_new0(struct qemuProcessEvent, 1); - - processEvent->eventType = QEMU_PROCESS_EVENT_GUEST_CRASHLOADED; - processEvent->vm = virObjectRef(vm); - qemuProcessEventSubmit(driver, &processEvent); + qemuProcessEventSubmit(opaque, vm, QEMU_PROCESS_EVENT_GUEST_CRASHLOADED, + 0, 0, NULL); virObjectUnlock(vm); } @@ -1822,8 +1740,6 @@ qemuProcessHandleMemoryDeviceSizeChange(qemuMonitor *mon G_GNUC_UNUSED, unsigned long long size, void *opaque) { - virQEMUDriver *driver = opaque; - struct qemuProcessEvent *processEvent = NULL; qemuMonitorMemoryDeviceSizeChange *info = NULL; virObjectLock(vm); @@ -1835,12 +1751,8 @@ qemuProcessHandleMemoryDeviceSizeChange(qemuMonitor *mon G_GNUC_UNUSED, info->devAlias = g_strdup(devAlias); info->size = size; - processEvent = g_new0(struct qemuProcessEvent, 1); - processEvent->eventType = QEMU_PROCESS_EVENT_MEMORY_DEVICE_SIZE_CHANGE; - processEvent->vm = virObjectRef(vm); - processEvent->data = g_steal_pointer(&info); - - qemuProcessEventSubmit(driver, &processEvent); + qemuProcessEventSubmit(opaque, vm, QEMU_PROCESS_EVENT_MEMORY_DEVICE_SIZE_CHANGE, + 0, 0, info); virObjectUnlock(vm); } -- 2.35.1

All callers (QMP event handlers) always pass non-NULL vm pointer. Let's make the parameter mandatory. Signed-off-by: Jiri Denemark <jdenemar@redhat.com> --- src/qemu/qemu_process.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 44a4bcfd74..e492f6961d 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -284,16 +284,14 @@ qemuProcessEventSubmit(virQEMUDriver *driver, { struct qemuProcessEvent *event = g_new0(struct qemuProcessEvent, 1); - if (vm) - event->vm = virObjectRef(vm); + event->vm = virObjectRef(vm); event->eventType = eventType; event->action = action; event->status = status; event->data = data; if (virThreadPoolSendJob(driver->workerPool, 0, event) < 0) { - if (vm) - virObjectUnref(vm); + virObjectUnref(vm); qemuProcessEventFree(event); } } -- 2.35.1

We can easily get it from the vm object. Signed-off-by: Jiri Denemark <jdenemar@redhat.com> --- src/qemu/qemu_process.c | 49 ++++++++++++++++++++--------------------- 1 file changed, 24 insertions(+), 25 deletions(-) diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index e492f6961d..d837fb22c9 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -264,7 +264,6 @@ qemuConnectAgent(virQEMUDriver *driver, virDomainObj *vm) /** * qemuProcessEventSubmit: - * @driver: QEMU driver object * @vm: pointer to the domain object, the function will take an extra reference * @eventType: the event to be processed * @action: event specific action to be taken @@ -275,14 +274,14 @@ qemuConnectAgent(virQEMUDriver *driver, virDomainObj *vm) * Submits @eventType to be processed by the asynchronous event handling thread. */ static void -qemuProcessEventSubmit(virQEMUDriver *driver, - virDomainObj *vm, +qemuProcessEventSubmit(virDomainObj *vm, qemuProcessEventType eventType, int action, int status, void *data) { struct qemuProcessEvent *event = g_new0(struct qemuProcessEvent, 1); + virQEMUDriver *driver = QEMU_DOMAIN_PRIVATE(vm)->driver; event->vm = virObjectRef(vm); event->eventType = eventType; @@ -321,7 +320,7 @@ qemuProcessHandleMonitorEOF(qemuMonitor *mon, goto cleanup; } - qemuProcessEventSubmit(driver, vm, QEMU_PROCESS_EVENT_MONITOR_EOF, + qemuProcessEventSubmit(vm, QEMU_PROCESS_EVENT_MONITOR_EOF, 0, 0, NULL); /* We don't want this EOF handler to be called over and over while the @@ -798,7 +797,7 @@ qemuProcessHandleWatchdog(qemuMonitor *mon G_GNUC_UNUSED, } if (vm->def->watchdog->action == VIR_DOMAIN_WATCHDOG_ACTION_DUMP) { - qemuProcessEventSubmit(driver, vm, QEMU_PROCESS_EVENT_WATCHDOG, + qemuProcessEventSubmit(vm, QEMU_PROCESS_EVENT_WATCHDOG, VIR_DOMAIN_WATCHDOG_ACTION_DUMP, 0, NULL); } @@ -882,7 +881,7 @@ qemuProcessHandleBlockJob(qemuMonitor *mon G_GNUC_UNUSED, int type, int status, const char *error, - void *opaque) + void *opaque G_GNUC_UNUSED) { qemuDomainObjPrivate *priv; virDomainDiskDef *disk; @@ -912,7 +911,7 @@ qemuProcessHandleBlockJob(qemuMonitor *mon G_GNUC_UNUSED, virDomainObjBroadcast(vm); } else { /* there is no waiting SYNC API, dispatch the update to a thread */ - qemuProcessEventSubmit(opaque, vm, QEMU_PROCESS_EVENT_BLOCK_JOB, + qemuProcessEventSubmit(vm, QEMU_PROCESS_EVENT_BLOCK_JOB, type, status, g_strdup(diskAlias)); } @@ -926,7 +925,7 @@ qemuProcessHandleJobStatusChange(qemuMonitor *mon G_GNUC_UNUSED, virDomainObj *vm, const char *jobname, int status, - void *opaque) + void *opaque G_GNUC_UNUSED) { qemuDomainObjPrivate *priv; qemuBlockJobData *job = NULL; @@ -959,7 +958,7 @@ qemuProcessHandleJobStatusChange(qemuMonitor *mon G_GNUC_UNUSED, virDomainObjBroadcast(vm); } else { VIR_DEBUG("job '%s' handled by event thread", jobname); - qemuProcessEventSubmit(opaque, vm, QEMU_PROCESS_EVENT_JOB_STATUS_CHANGE, + qemuProcessEventSubmit(vm, QEMU_PROCESS_EVENT_JOB_STATUS_CHANGE, 0, 0, virObjectRef(job)); } @@ -1192,11 +1191,11 @@ static void qemuProcessHandleGuestPanic(qemuMonitor *mon G_GNUC_UNUSED, virDomainObj *vm, qemuMonitorEventPanicInfo *info, - void *opaque) + void *opaque G_GNUC_UNUSED) { virObjectLock(vm); - qemuProcessEventSubmit(opaque, vm, QEMU_PROCESS_EVENT_GUESTPANIC, + qemuProcessEventSubmit(vm, QEMU_PROCESS_EVENT_GUESTPANIC, vm->def->onCrash, 0, info); virObjectUnlock(vm); @@ -1207,7 +1206,7 @@ void qemuProcessHandleDeviceDeleted(qemuMonitor *mon G_GNUC_UNUSED, virDomainObj *vm, const char *devAlias, - void *opaque) + void *opaque G_GNUC_UNUSED) { virObjectLock(vm); @@ -1218,7 +1217,7 @@ qemuProcessHandleDeviceDeleted(qemuMonitor *mon G_GNUC_UNUSED, QEMU_DOMAIN_UNPLUGGING_DEVICE_STATUS_OK)) goto cleanup; - qemuProcessEventSubmit(opaque, vm, QEMU_PROCESS_EVENT_DEVICE_DELETED, + qemuProcessEventSubmit(vm, QEMU_PROCESS_EVENT_DEVICE_DELETED, 0, 0, g_strdup(devAlias)); cleanup: @@ -1410,14 +1409,14 @@ static void qemuProcessHandleNicRxFilterChanged(qemuMonitor *mon G_GNUC_UNUSED, virDomainObj *vm, const char *devAlias, - void *opaque) + void *opaque G_GNUC_UNUSED) { virObjectLock(vm); VIR_DEBUG("Device %s RX Filter changed in domain %p %s", devAlias, vm, vm->def->name); - qemuProcessEventSubmit(opaque, vm, QEMU_PROCESS_EVENT_NIC_RX_FILTER_CHANGED, + qemuProcessEventSubmit(vm, QEMU_PROCESS_EVENT_NIC_RX_FILTER_CHANGED, 0, 0, g_strdup(devAlias)); virObjectUnlock(vm); @@ -1429,14 +1428,14 @@ qemuProcessHandleSerialChanged(qemuMonitor *mon G_GNUC_UNUSED, virDomainObj *vm, const char *devAlias, bool connected, - void *opaque) + void *opaque G_GNUC_UNUSED) { virObjectLock(vm); VIR_DEBUG("Serial port %s state changed to '%d' in domain %p %s", devAlias, connected, vm, vm->def->name); - qemuProcessEventSubmit(opaque, vm, QEMU_PROCESS_EVENT_SERIAL_CHANGED, + qemuProcessEventSubmit(vm, QEMU_PROCESS_EVENT_SERIAL_CHANGED, connected, 0, g_strdup(devAlias)); virObjectUnlock(vm); @@ -1596,7 +1595,7 @@ qemuProcessHandlePRManagerStatusChanged(qemuMonitor *mon G_GNUC_UNUSED, virDomainObj *vm, const char *prManager, bool connected, - void *opaque) + void *opaque G_GNUC_UNUSED) { qemuDomainObjPrivate *priv; const char *managedAlias = qemuDomainGetManagedPRAlias(); @@ -1621,7 +1620,7 @@ qemuProcessHandlePRManagerStatusChanged(qemuMonitor *mon G_GNUC_UNUSED, priv = vm->privateData; priv->prDaemonRunning = false; - qemuProcessEventSubmit(opaque, vm, QEMU_PROCESS_EVENT_PR_DISCONNECT, + qemuProcessEventSubmit(vm, QEMU_PROCESS_EVENT_PR_DISCONNECT, 0, 0, NULL); cleanup: @@ -1636,7 +1635,7 @@ qemuProcessHandleRdmaGidStatusChanged(qemuMonitor *mon G_GNUC_UNUSED, bool gid_status, unsigned long long subnet_prefix, unsigned long long interface_id, - void *opaque) + void *opaque G_GNUC_UNUSED) { qemuMonitorRdmaGidStatus *info = NULL; @@ -1653,7 +1652,7 @@ qemuProcessHandleRdmaGidStatusChanged(qemuMonitor *mon G_GNUC_UNUSED, info->subnet_prefix = subnet_prefix; info->interface_id = interface_id; - qemuProcessEventSubmit(opaque, vm, QEMU_PROCESS_EVENT_RDMA_GID_STATUS_CHANGED, + qemuProcessEventSubmit(vm, QEMU_PROCESS_EVENT_RDMA_GID_STATUS_CHANGED, 0, 0, info); virObjectUnlock(vm); @@ -1663,11 +1662,11 @@ qemuProcessHandleRdmaGidStatusChanged(qemuMonitor *mon G_GNUC_UNUSED, static void qemuProcessHandleGuestCrashloaded(qemuMonitor *mon G_GNUC_UNUSED, virDomainObj *vm, - void *opaque) + void *opaque G_GNUC_UNUSED) { virObjectLock(vm); - qemuProcessEventSubmit(opaque, vm, QEMU_PROCESS_EVENT_GUEST_CRASHLOADED, + qemuProcessEventSubmit(vm, QEMU_PROCESS_EVENT_GUEST_CRASHLOADED, 0, 0, NULL); virObjectUnlock(vm); @@ -1736,7 +1735,7 @@ qemuProcessHandleMemoryDeviceSizeChange(qemuMonitor *mon G_GNUC_UNUSED, virDomainObj *vm, const char *devAlias, unsigned long long size, - void *opaque) + void *opaque G_GNUC_UNUSED) { qemuMonitorMemoryDeviceSizeChange *info = NULL; @@ -1749,7 +1748,7 @@ qemuProcessHandleMemoryDeviceSizeChange(qemuMonitor *mon G_GNUC_UNUSED, info->devAlias = g_strdup(devAlias); info->size = size; - qemuProcessEventSubmit(opaque, vm, QEMU_PROCESS_EVENT_MEMORY_DEVICE_SIZE_CHANGE, + qemuProcessEventSubmit(vm, QEMU_PROCESS_EVENT_MEMORY_DEVICE_SIZE_CHANGE, 0, 0, info); virObjectUnlock(vm); -- 2.35.1

It always points to QEMU driver, which is quite redundant as all callbacks also get a pointer to a vm object. Let's get the driver pointer from there instead. Signed-off-by: Jiri Denemark <jdenemar@redhat.com> --- src/qemu/qemu_process.c | 119 +++++++++++++++++++++++----------------- 1 file changed, 70 insertions(+), 49 deletions(-) diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index d837fb22c9..11d1a4176a 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -305,9 +305,8 @@ qemuProcessEventSubmit(virDomainObj *vm, static void qemuProcessHandleMonitorEOF(qemuMonitor *mon, virDomainObj *vm, - void *opaque) + void *opaque G_GNUC_UNUSED) { - virQEMUDriver *driver = opaque; qemuDomainObjPrivate *priv; virObjectLock(vm); @@ -332,7 +331,7 @@ qemuProcessHandleMonitorEOF(qemuMonitor *mon, /* We don't want any cleanup from EOF handler (or any other * thread) to enter qemu namespace. */ - qemuDomainDestroyNamespace(driver, vm); + qemuDomainDestroyNamespace(priv->driver, vm); cleanup: virObjectUnlock(vm); @@ -348,17 +347,18 @@ qemuProcessHandleMonitorEOF(qemuMonitor *mon, static void qemuProcessHandleMonitorError(qemuMonitor *mon G_GNUC_UNUSED, virDomainObj *vm, - void *opaque) + void *opaque G_GNUC_UNUSED) { - virQEMUDriver *driver = opaque; + qemuDomainObjPrivate *priv; virObjectEvent *event = NULL; virObjectLock(vm); VIR_DEBUG("Received error on %p '%s'", vm, vm->def->name); - ((qemuDomainObjPrivate *) vm->privateData)->monError = true; + priv = vm->privateData; + priv->monError = true; event = virDomainEventControlErrorNewFromObj(vm); - virObjectEventStateQueue(driver->domainEventState, event); + virObjectEventStateQueue(priv->driver->domainEventState, event); virObjectUnlock(vm); } @@ -409,15 +409,17 @@ qemuProcessFindDomainDiskByAliasOrQOM(virDomainObj *vm, static void qemuProcessHandleReset(qemuMonitor *mon G_GNUC_UNUSED, virDomainObj *vm, - void *opaque) + void *opaque G_GNUC_UNUSED) { - virQEMUDriver *driver = opaque; + virQEMUDriver *driver; virObjectEvent *event = NULL; qemuDomainObjPrivate *priv; virDomainState state; int reason; virObjectLock(vm); + priv = vm->privateData; + driver = priv->driver; state = virDomainObjGetState(vm, &reason); @@ -430,7 +432,6 @@ qemuProcessHandleReset(qemuMonitor *mon G_GNUC_UNUSED, } event = virDomainEventRebootNewFromObj(vm); - priv = vm->privateData; if (priv->agent) qemuAgentNotifyEvent(priv->agent, QEMU_AGENT_EVENT_RESET); @@ -542,14 +543,15 @@ qemuProcessHandleEvent(qemuMonitor *mon G_GNUC_UNUSED, long long seconds, unsigned int micros, const char *details, - void *opaque) + void *opaque G_GNUC_UNUSED) { - virQEMUDriver *driver = opaque; + virQEMUDriver *driver; virObjectEvent *event = NULL; VIR_DEBUG("vm=%p", vm); virObjectLock(vm); + driver = QEMU_DOMAIN_PRIVATE(vm)->driver; event = virDomainQemuMonitorEventNew(vm->def->id, vm->def->name, vm->def->uuid, eventName, seconds, micros, details); @@ -563,9 +565,9 @@ static void qemuProcessHandleShutdown(qemuMonitor *mon G_GNUC_UNUSED, virDomainObj *vm, virTristateBool guest_initiated, - void *opaque) + void *opaque G_GNUC_UNUSED) { - virQEMUDriver *driver = opaque; + virQEMUDriver *driver; qemuDomainObjPrivate *priv; virObjectEvent *event = NULL; int detail = 0; @@ -575,6 +577,8 @@ qemuProcessHandleShutdown(qemuMonitor *mon G_GNUC_UNUSED, virObjectLock(vm); priv = vm->privateData; + driver = priv->driver; + if (virDomainObjGetState(vm, NULL) == VIR_DOMAIN_SHUTDOWN) { VIR_DEBUG("Ignoring repeated SHUTDOWN event from domain %s", vm->def->name); @@ -633,9 +637,9 @@ qemuProcessHandleShutdown(qemuMonitor *mon G_GNUC_UNUSED, static void qemuProcessHandleStop(qemuMonitor *mon G_GNUC_UNUSED, virDomainObj *vm, - void *opaque) + void *opaque G_GNUC_UNUSED) { - virQEMUDriver *driver = opaque; + virQEMUDriver *driver; virObjectEvent *event = NULL; virDomainPausedReason reason; virDomainEventSuspendedDetailType detail; @@ -643,6 +647,7 @@ qemuProcessHandleStop(qemuMonitor *mon G_GNUC_UNUSED, virObjectLock(vm); + driver = priv->driver; reason = priv->pausedReason; priv->pausedReason = VIR_DOMAIN_PAUSED_UNKNOWN; @@ -690,9 +695,9 @@ qemuProcessHandleStop(qemuMonitor *mon G_GNUC_UNUSED, static void qemuProcessHandleResume(qemuMonitor *mon G_GNUC_UNUSED, virDomainObj *vm, - void *opaque) + void *opaque G_GNUC_UNUSED) { - virQEMUDriver *driver = opaque; + virQEMUDriver *driver; virObjectEvent *event = NULL; qemuDomainObjPrivate *priv; virDomainRunningReason reason = VIR_DOMAIN_RUNNING_UNPAUSED; @@ -701,6 +706,8 @@ qemuProcessHandleResume(qemuMonitor *mon G_GNUC_UNUSED, virObjectLock(vm); priv = vm->privateData; + driver = priv->driver; + if (priv->runningReason != VIR_DOMAIN_RUNNING_UNKNOWN) { reason = priv->runningReason; priv->runningReason = VIR_DOMAIN_RUNNING_UNKNOWN; @@ -728,12 +735,13 @@ static void qemuProcessHandleRTCChange(qemuMonitor *mon G_GNUC_UNUSED, virDomainObj *vm, long long offset, - void *opaque) + void *opaque G_GNUC_UNUSED) { - virQEMUDriver *driver = opaque; + virQEMUDriver *driver; virObjectEvent *event = NULL; virObjectLock(vm); + driver = QEMU_DOMAIN_PRIVATE(vm)->driver; if (vm->def->clock.offset == VIR_DOMAIN_CLOCK_OFFSET_VARIABLE) { /* when a basedate is manually given on the qemu commandline @@ -769,13 +777,14 @@ static void qemuProcessHandleWatchdog(qemuMonitor *mon G_GNUC_UNUSED, virDomainObj *vm, int action, - void *opaque) + void *opaque G_GNUC_UNUSED) { - virQEMUDriver *driver = opaque; + virQEMUDriver *driver; virObjectEvent *watchdogEvent = NULL; virObjectEvent *lifecycleEvent = NULL; virObjectLock(vm); + driver = QEMU_DOMAIN_PRIVATE(vm)->driver; watchdogEvent = virDomainEventWatchdogNewFromObj(vm, action); if (action == VIR_DOMAIN_EVENT_WATCHDOG_PAUSE && @@ -814,9 +823,9 @@ qemuProcessHandleIOError(qemuMonitor *mon G_GNUC_UNUSED, const char *nodename, int action, const char *reason, - void *opaque) + void *opaque G_GNUC_UNUSED) { - virQEMUDriver *driver = opaque; + virQEMUDriver *driver; virObjectEvent *ioErrorEvent = NULL; virObjectEvent *ioErrorEvent2 = NULL; virObjectEvent *lifecycleEvent = NULL; @@ -825,6 +834,7 @@ qemuProcessHandleIOError(qemuMonitor *mon G_GNUC_UNUSED, virDomainDiskDef *disk; virObjectLock(vm); + driver = QEMU_DOMAIN_PRIVATE(vm)->driver; if (*diskAlias == '\0') diskAlias = NULL; @@ -980,9 +990,9 @@ qemuProcessHandleGraphics(qemuMonitor *mon G_GNUC_UNUSED, const char *authScheme, const char *x509dname, const char *saslUsername, - void *opaque) + void *opaque G_GNUC_UNUSED) { - virQEMUDriver *driver = opaque; + virQEMUDriver *driver; virObjectEvent *event; virDomainEventGraphicsAddressPtr localAddr = NULL; virDomainEventGraphicsAddressPtr remoteAddr = NULL; @@ -1013,6 +1023,7 @@ qemuProcessHandleGraphics(qemuMonitor *mon G_GNUC_UNUSED, } virObjectLock(vm); + driver = QEMU_DOMAIN_PRIVATE(vm)->driver; event = virDomainEventGraphicsNewFromObj(vm, phase, localAddr, remoteAddr, authScheme, subject); virObjectUnlock(vm); @@ -1025,13 +1036,14 @@ qemuProcessHandleTrayChange(qemuMonitor *mon G_GNUC_UNUSED, const char *devAlias, const char *devid, int reason, - void *opaque) + void *opaque G_GNUC_UNUSED) { - virQEMUDriver *driver = opaque; + virQEMUDriver *driver; virObjectEvent *event = NULL; virDomainDiskDef *disk; virObjectLock(vm); + driver = QEMU_DOMAIN_PRIVATE(vm)->driver; disk = qemuProcessFindDomainDiskByAliasOrQOM(vm, devAlias, devid); if (disk) { @@ -1053,13 +1065,14 @@ qemuProcessHandleTrayChange(qemuMonitor *mon G_GNUC_UNUSED, static void qemuProcessHandlePMWakeup(qemuMonitor *mon G_GNUC_UNUSED, virDomainObj *vm, - void *opaque) + void *opaque G_GNUC_UNUSED) { - virQEMUDriver *driver = opaque; + virQEMUDriver *driver; virObjectEvent *event = NULL; virObjectEvent *lifecycleEvent = NULL; virObjectLock(vm); + driver = QEMU_DOMAIN_PRIVATE(vm)->driver; event = virDomainEventPMWakeupNewFromObj(vm); /* Don't set domain status back to running if it wasn't paused @@ -1085,13 +1098,14 @@ qemuProcessHandlePMWakeup(qemuMonitor *mon G_GNUC_UNUSED, static void qemuProcessHandlePMSuspend(qemuMonitor *mon G_GNUC_UNUSED, virDomainObj *vm, - void *opaque) + void *opaque G_GNUC_UNUSED) { - virQEMUDriver *driver = opaque; + virQEMUDriver *driver; virObjectEvent *event = NULL; virObjectEvent *lifecycleEvent = NULL; virObjectLock(vm); + driver = QEMU_DOMAIN_PRIVATE(vm)->driver; event = virDomainEventPMSuspendNewFromObj(vm); if (virDomainObjGetState(vm, NULL) == VIR_DOMAIN_RUNNING) { @@ -1121,13 +1135,14 @@ static void qemuProcessHandleBalloonChange(qemuMonitor *mon G_GNUC_UNUSED, virDomainObj *vm, unsigned long long actual, - void *opaque) + void *opaque G_GNUC_UNUSED) { - virQEMUDriver *driver = opaque; + virQEMUDriver *driver; virObjectEvent *event = NULL; size_t i; virObjectLock(vm); + driver = QEMU_DOMAIN_PRIVATE(vm)->driver; event = virDomainEventBalloonChangeNewFromObj(vm, actual); /* We want the balloon size stored in domain definition to @@ -1154,13 +1169,14 @@ qemuProcessHandleBalloonChange(qemuMonitor *mon G_GNUC_UNUSED, static void qemuProcessHandlePMSuspendDisk(qemuMonitor *mon G_GNUC_UNUSED, virDomainObj *vm, - void *opaque) + void *opaque G_GNUC_UNUSED) { - virQEMUDriver *driver = opaque; + virQEMUDriver *driver; virObjectEvent *event = NULL; virObjectEvent *lifecycleEvent = NULL; virObjectLock(vm); + driver = QEMU_DOMAIN_PRIVATE(vm)->driver; event = virDomainEventPMSuspendDiskNewFromObj(vm); if (virDomainObjGetState(vm, NULL) == VIR_DOMAIN_RUNNING) { @@ -1230,12 +1246,13 @@ qemuProcessHandleDeviceUnplugErr(qemuMonitor *mon G_GNUC_UNUSED, virDomainObj *vm, const char *devPath, const char *devAlias, - void *opaque) + void *opaque G_GNUC_UNUSED) { - virQEMUDriver *driver = opaque; + virQEMUDriver *driver; virObjectEvent *event = NULL; virObjectLock(vm); + driver = QEMU_DOMAIN_PRIVATE(vm)->driver; VIR_DEBUG("Device %s QOM path %s failed to be removed from domain %p %s", devAlias, devPath, vm, vm->def->name); @@ -1325,12 +1342,13 @@ qemuProcessHandleAcpiOstInfo(qemuMonitor *mon G_GNUC_UNUSED, const char *slot, unsigned int source, unsigned int status, - void *opaque) + void *opaque G_GNUC_UNUSED) { - virQEMUDriver *driver = opaque; + virQEMUDriver *driver; virObjectEvent *event = NULL; virObjectLock(vm); + driver = QEMU_DOMAIN_PRIVATE(vm)->driver; VIR_DEBUG("ACPI OST info for device %s domain %p %s. " "slotType='%s' slot='%s' source=%u status=%u", @@ -1361,10 +1379,10 @@ qemuProcessHandleBlockThreshold(qemuMonitor *mon G_GNUC_UNUSED, const char *nodename, unsigned long long threshold, unsigned long long excess, - void *opaque) + void *opaque G_GNUC_UNUSED) { qemuDomainObjPrivate *priv; - virQEMUDriver *driver = opaque; + virQEMUDriver *driver; virObjectEvent *eventSource = NULL; virObjectEvent *eventDevice = NULL; virDomainDiskDef *disk; @@ -1374,6 +1392,7 @@ qemuProcessHandleBlockThreshold(qemuMonitor *mon G_GNUC_UNUSED, virObjectLock(vm); priv = vm->privateData; + driver = priv->driver; VIR_DEBUG("BLOCK_WRITE_THRESHOLD event for block node '%s' in domain %p %s:" "threshold '%llu' exceeded by '%llu'", @@ -1474,11 +1493,11 @@ static void qemuProcessHandleMigrationStatus(qemuMonitor *mon G_GNUC_UNUSED, virDomainObj *vm, int status, - void *opaque) + void *opaque G_GNUC_UNUSED) { qemuDomainObjPrivate *priv; qemuDomainJobDataPrivate *privJob = NULL; - virQEMUDriver *driver = opaque; + virQEMUDriver *driver; virObjectEvent *event = NULL; int reason; @@ -1489,6 +1508,8 @@ qemuProcessHandleMigrationStatus(qemuMonitor *mon G_GNUC_UNUSED, qemuMonitorMigrationStatusTypeToString(status)); priv = vm->privateData; + driver = priv->driver; + if (priv->job.asyncJob == VIR_ASYNC_JOB_NONE) { VIR_DEBUG("got MIGRATION event without a migration job"); goto cleanup; @@ -1524,9 +1545,8 @@ static void qemuProcessHandleMigrationPass(qemuMonitor *mon G_GNUC_UNUSED, virDomainObj *vm, int pass, - void *opaque) + void *opaque G_GNUC_UNUSED) { - virQEMUDriver *driver = opaque; qemuDomainObjPrivate *priv; virObjectLock(vm); @@ -1540,7 +1560,7 @@ qemuProcessHandleMigrationPass(qemuMonitor *mon G_GNUC_UNUSED, goto cleanup; } - virObjectEventStateQueue(driver->domainEventState, + virObjectEventStateQueue(priv->driver->domainEventState, virDomainEventMigrationIterationNewFromObj(vm, pass)); cleanup: @@ -1677,15 +1697,16 @@ static void qemuProcessHandleMemoryFailure(qemuMonitor *mon G_GNUC_UNUSED, virDomainObj *vm, qemuMonitorEventMemoryFailure *mfp, - void *opaque) + void *opaque G_GNUC_UNUSED) { - virQEMUDriver *driver = opaque; + virQEMUDriver *driver; virObjectEvent *event = NULL; virDomainMemoryFailureRecipientType recipient; virDomainMemoryFailureActionType action; unsigned int flags = 0; virObjectLock(vm); + driver = QEMU_DOMAIN_PRIVATE(vm)->driver; switch (mfp->recipient) { case QEMU_MONITOR_MEMORY_FAILURE_RECIPIENT_HYPERVISOR: -- 2.35.1

Signed-off-by: Jiri Denemark <jdenemar@redhat.com> --- src/qemu/qemu_monitor.c | 16 ++--- src/qemu/qemu_monitor.h | 108 ++++++++++++---------------------- src/qemu/qemu_monitor_priv.h | 1 - src/qemu/qemu_process.c | 110 ++++++++++++----------------------- src/qemu/qemu_processpriv.h | 3 +- tests/qemuhotplugtest.c | 3 +- tests/qemumonitortestutils.c | 15 ++--- tests/qemumonitortestutils.h | 5 +- 8 files changed, 88 insertions(+), 173 deletions(-) diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c index d44c7f0c60..2cfe9dbb00 100644 --- a/src/qemu/qemu_monitor.c +++ b/src/qemu/qemu_monitor.c @@ -578,7 +578,7 @@ qemuMonitorIO(GSocket *socket G_GNUC_UNUSED, virObjectUnlock(mon); VIR_DEBUG("Triggering EOF callback mon=%p vm=%p name=%s", mon, mon->vm, mon->domainName); - (eofNotify)(mon, vm, mon->callbackOpaque); + (eofNotify)(mon, vm); virObjectUnref(mon); } else if (error) { qemuMonitorErrorNotifyCallback errorNotify = mon->cb->errorNotify; @@ -589,7 +589,7 @@ qemuMonitorIO(GSocket *socket G_GNUC_UNUSED, virObjectUnlock(mon); VIR_DEBUG("Triggering error callback mon=%p vm=%p name=%s", mon, mon->vm, mon->domainName); - (errorNotify)(mon, vm, mon->callbackOpaque); + (errorNotify)(mon, vm); virObjectUnref(mon); } else { virObjectUnlock(mon); @@ -604,8 +604,7 @@ static qemuMonitor * qemuMonitorOpenInternal(virDomainObj *vm, int fd, GMainContext *context, - qemuMonitorCallbacks *cb, - void *opaque) + qemuMonitorCallbacks *cb) { qemuDomainObjPrivate *priv = vm->privateData; qemuMonitor *mon; @@ -639,7 +638,6 @@ qemuMonitorOpenInternal(virDomainObj *vm, mon->domainName = g_strdup(NULLSTR(vm->def->name)); mon->waitGreeting = true; mon->cb = cb; - mon->callbackOpaque = opaque; if (priv) mon->objectAddNoWrap = virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_OBJECT_JSON); @@ -688,7 +686,6 @@ qemuMonitorOpenInternal(virDomainObj *vm, * @config: monitor configuration * @timeout: number of seconds to add to default timeout * @cb: monitor event handles - * @opaque: opaque data for @cb * * Opens the monitor for running qemu. It may happen that it * takes some time for qemu to create the monitor socket (e.g. @@ -704,8 +701,7 @@ qemuMonitorOpen(virDomainObj *vm, bool retry, unsigned long long timeout, GMainContext *context, - qemuMonitorCallbacks *cb, - void *opaque) + qemuMonitorCallbacks *cb) { VIR_AUTOCLOSE fd = -1; qemuMonitor *ret = NULL; @@ -733,7 +729,7 @@ qemuMonitorOpen(virDomainObj *vm, return NULL; } - ret = qemuMonitorOpenInternal(vm, fd, context, cb, opaque); + ret = qemuMonitorOpenInternal(vm, fd, context, cb); fd = -1; return ret; } @@ -1085,7 +1081,7 @@ qemuMonitorUpdateVideoVram64Size(qemuMonitor *mon, virObjectRef(mon); \ virObjectUnlock(mon); \ if ((mon)->cb && (mon)->cb->callback) \ - (mon)->cb->callback(mon, __VA_ARGS__, (mon)->callbackOpaque); \ + (mon)->cb->callback(mon, __VA_ARGS__); \ virObjectLock(mon); \ virObjectUnref(mon); \ } while (0) diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h index b1484fdff8..be341d5196 100644 --- a/src/qemu/qemu_monitor.h +++ b/src/qemu/qemu_monitor.h @@ -180,49 +180,38 @@ void qemuMonitorEventRdmaGidStatusFree(qemuMonitorRdmaGidStatus *info); void qemuMonitorMemoryDeviceSizeChangeFree(qemuMonitorMemoryDeviceSizeChange *info); typedef void (*qemuMonitorDestroyCallback)(qemuMonitor *mon, - virDomainObj *vm, - void *opaque); + virDomainObj *vm); typedef void (*qemuMonitorEofNotifyCallback)(qemuMonitor *mon, - virDomainObj *vm, - void *opaque); + virDomainObj *vm); typedef void (*qemuMonitorErrorNotifyCallback)(qemuMonitor *mon, - virDomainObj *vm, - void *opaque); + virDomainObj *vm); typedef void (*qemuMonitorDomainEventCallback)(qemuMonitor *mon, virDomainObj *vm, const char *event, long long seconds, unsigned int micros, - const char *details, - void *opaque); + const char *details); typedef void (*qemuMonitorDomainShutdownCallback)(qemuMonitor *mon, virDomainObj *vm, - virTristateBool guest, - void *opaque); + virTristateBool guest); typedef void (*qemuMonitorDomainResetCallback)(qemuMonitor *mon, - virDomainObj *vm, - void *opaque); + virDomainObj *vm); typedef void (*qemuMonitorDomainStopCallback)(qemuMonitor *mon, - virDomainObj *vm, - void *opaque); + virDomainObj *vm); typedef void (*qemuMonitorDomainResumeCallback)(qemuMonitor *mon, - virDomainObj *vm, - void *opaque); + virDomainObj *vm); typedef void (*qemuMonitorDomainRTCChangeCallback)(qemuMonitor *mon, virDomainObj *vm, - long long offset, - void *opaque); + long long offset); typedef void (*qemuMonitorDomainWatchdogCallback)(qemuMonitor *mon, virDomainObj *vm, - int action, - void *opaque); + int action); typedef void (*qemuMonitorDomainIOErrorCallback)(qemuMonitor *mon, virDomainObj *vm, const char *diskAlias, const char *nodename, int action, - const char *reason, - void *opaque); + const char *reason); typedef void (*qemuMonitorDomainGraphicsCallback)(qemuMonitor *mon, virDomainObj *vm, int phase, @@ -234,76 +223,60 @@ typedef void (*qemuMonitorDomainGraphicsCallback)(qemuMonitor *mon, const char *remoteService, const char *authScheme, const char *x509dname, - const char *saslUsername, - void *opaque); + const char *saslUsername); typedef void (*qemuMonitorDomainBlockJobCallback)(qemuMonitor *mon, virDomainObj *vm, const char *diskAlias, int type, int status, - const char *error, - void *opaque); + const char *error); typedef void (*qemuMonitorDomainJobStatusChangeCallback)(qemuMonitor *mon, virDomainObj *vm, const char *jobname, - int status, - void *opaque); + int status); typedef void (*qemuMonitorDomainTrayChangeCallback)(qemuMonitor *mon, virDomainObj *vm, const char *devAlias, const char *devid, - int reason, - void *opaque); + int reason); typedef void (*qemuMonitorDomainPMWakeupCallback)(qemuMonitor *mon, - virDomainObj *vm, - void *opaque); + virDomainObj *vm); typedef void (*qemuMonitorDomainPMSuspendCallback)(qemuMonitor *mon, - virDomainObj *vm, - void *opaque); + virDomainObj *vm); typedef void (*qemuMonitorDomainBalloonChangeCallback)(qemuMonitor *mon, virDomainObj *vm, - unsigned long long actual, - void *opaque); + unsigned long long actual); typedef void (*qemuMonitorDomainPMSuspendDiskCallback)(qemuMonitor *mon, - virDomainObj *vm, - void *opaque); + virDomainObj *vm); typedef void (*qemuMonitorDomainGuestPanicCallback)(qemuMonitor *mon, virDomainObj *vm, - qemuMonitorEventPanicInfo *info, - void *opaque); + qemuMonitorEventPanicInfo *info); typedef void (*qemuMonitorDomainDeviceDeletedCallback)(qemuMonitor *mon, virDomainObj *vm, - const char *devAlias, - void *opaque); + const char *devAlias); typedef void (*qemuMonitorDomainDeviceUnplugErrCallback)(qemuMonitor *mon, virDomainObj *vm, const char *devPath, - const char *devAlias, - void *opaque); + const char *devAlias); typedef void (*qemuMonitorDomainNicRxFilterChangedCallback)(qemuMonitor *mon, virDomainObj *vm, - const char *devAlias, - void *opaque); + const char *devAlias); typedef void (*qemuMonitorDomainSerialChangeCallback)(qemuMonitor *mon, virDomainObj *vm, const char *devAlias, - bool connected, - void *opaque); + bool connected); typedef void (*qemuMonitorDomainSpiceMigratedCallback)(qemuMonitor *mon, - virDomainObj *vm, - void *opaque); + virDomainObj *vm); typedef void (*qemuMonitorDomainMigrationStatusCallback)(qemuMonitor *mon, virDomainObj *vm, - int status, - void *opaque); + int status); typedef void (*qemuMonitorDomainMigrationPassCallback)(qemuMonitor *mon, virDomainObj *vm, - int pass, - void *opaque); + int pass); typedef void (*qemuMonitorDomainAcpiOstInfoCallback)(qemuMonitor *mon, virDomainObj *vm, @@ -311,16 +284,14 @@ typedef void (*qemuMonitorDomainAcpiOstInfoCallback)(qemuMonitor *mon, const char *slotType, const char *slot, unsigned int source, - unsigned int status, - void *opaque); + unsigned int status); typedef void (*qemuMonitorDomainBlockThresholdCallback)(qemuMonitor *mon, virDomainObj *vm, const char *nodename, unsigned long long threshold, - unsigned long long excess, - void *opaque); + unsigned long long excess); typedef enum { @@ -345,26 +316,22 @@ typedef void (*qemuMonitorDomainDumpCompletedCallback)(qemuMonitor *mon, virDomainObj *vm, int status, qemuMonitorDumpStats *stats, - const char *error, - void *opaque); + const char *error); typedef void (*qemuMonitorDomainPRManagerStatusChangedCallback)(qemuMonitor *mon, virDomainObj *vm, const char *prManager, - bool connected, - void *opaque); + bool connected); typedef void (*qemuMonitorDomainRdmaGidStatusChangedCallback)(qemuMonitor *mon, virDomainObj *vm, const char *netdev, bool gid_status, unsigned long long subnet_prefix, - unsigned long long interface_id, - void *opaque); + unsigned long long interface_id); typedef void (*qemuMonitorDomainGuestCrashloadedCallback)(qemuMonitor *mon, - virDomainObj *vm, - void *opaque); + virDomainObj *vm); typedef enum { QEMU_MONITOR_MEMORY_FAILURE_RECIPIENT_HYPERVISOR, @@ -396,14 +363,12 @@ struct _qemuMonitorEventMemoryFailure { typedef void (*qemuMonitorDomainMemoryFailureCallback)(qemuMonitor *mon, virDomainObj *vm, - qemuMonitorEventMemoryFailure *mfp, - void *opaque); + qemuMonitorEventMemoryFailure *mfp); typedef void (*qemuMonitorDomainMemoryDeviceSizeChange)(qemuMonitor *mon, virDomainObj *vm, const char *alias, - unsigned long long size, - void *opaque); + unsigned long long size); typedef struct _qemuMonitorCallbacks qemuMonitorCallbacks; struct _qemuMonitorCallbacks { @@ -448,8 +413,7 @@ qemuMonitor *qemuMonitorOpen(virDomainObj *vm, bool retry, unsigned long long timeout, GMainContext *context, - qemuMonitorCallbacks *cb, - void *opaque) + qemuMonitorCallbacks *cb) ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(5); void qemuMonitorWatchDispose(void); diff --git a/src/qemu/qemu_monitor_priv.h b/src/qemu/qemu_monitor_priv.h index 70f5f16e72..05ac5499bb 100644 --- a/src/qemu/qemu_monitor_priv.h +++ b/src/qemu/qemu_monitor_priv.h @@ -57,7 +57,6 @@ struct _qemuMonitor { char *domainName; qemuMonitorCallbacks *cb; - void *callbackOpaque; /* If there's a command being processed this will be * non-NULL */ diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 11d1a4176a..07acb1c427 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -304,8 +304,7 @@ qemuProcessEventSubmit(virDomainObj *vm, */ static void qemuProcessHandleMonitorEOF(qemuMonitor *mon, - virDomainObj *vm, - void *opaque G_GNUC_UNUSED) + virDomainObj *vm) { qemuDomainObjPrivate *priv; @@ -346,8 +345,7 @@ qemuProcessHandleMonitorEOF(qemuMonitor *mon, */ static void qemuProcessHandleMonitorError(qemuMonitor *mon G_GNUC_UNUSED, - virDomainObj *vm, - void *opaque G_GNUC_UNUSED) + virDomainObj *vm) { qemuDomainObjPrivate *priv; virObjectEvent *event = NULL; @@ -408,8 +406,7 @@ qemuProcessFindDomainDiskByAliasOrQOM(virDomainObj *vm, static void qemuProcessHandleReset(qemuMonitor *mon G_GNUC_UNUSED, - virDomainObj *vm, - void *opaque G_GNUC_UNUSED) + virDomainObj *vm) { virQEMUDriver *driver; virObjectEvent *event = NULL; @@ -542,8 +539,7 @@ qemuProcessHandleEvent(qemuMonitor *mon G_GNUC_UNUSED, const char *eventName, long long seconds, unsigned int micros, - const char *details, - void *opaque G_GNUC_UNUSED) + const char *details) { virQEMUDriver *driver; virObjectEvent *event = NULL; @@ -564,8 +560,7 @@ qemuProcessHandleEvent(qemuMonitor *mon G_GNUC_UNUSED, static void qemuProcessHandleShutdown(qemuMonitor *mon G_GNUC_UNUSED, virDomainObj *vm, - virTristateBool guest_initiated, - void *opaque G_GNUC_UNUSED) + virTristateBool guest_initiated) { virQEMUDriver *driver; qemuDomainObjPrivate *priv; @@ -636,8 +631,7 @@ qemuProcessHandleShutdown(qemuMonitor *mon G_GNUC_UNUSED, static void qemuProcessHandleStop(qemuMonitor *mon G_GNUC_UNUSED, - virDomainObj *vm, - void *opaque G_GNUC_UNUSED) + virDomainObj *vm) { virQEMUDriver *driver; virObjectEvent *event = NULL; @@ -694,8 +688,7 @@ qemuProcessHandleStop(qemuMonitor *mon G_GNUC_UNUSED, static void qemuProcessHandleResume(qemuMonitor *mon G_GNUC_UNUSED, - virDomainObj *vm, - void *opaque G_GNUC_UNUSED) + virDomainObj *vm) { virQEMUDriver *driver; virObjectEvent *event = NULL; @@ -734,8 +727,7 @@ qemuProcessHandleResume(qemuMonitor *mon G_GNUC_UNUSED, static void qemuProcessHandleRTCChange(qemuMonitor *mon G_GNUC_UNUSED, virDomainObj *vm, - long long offset, - void *opaque G_GNUC_UNUSED) + long long offset) { virQEMUDriver *driver; virObjectEvent *event = NULL; @@ -776,8 +768,7 @@ qemuProcessHandleRTCChange(qemuMonitor *mon G_GNUC_UNUSED, static void qemuProcessHandleWatchdog(qemuMonitor *mon G_GNUC_UNUSED, virDomainObj *vm, - int action, - void *opaque G_GNUC_UNUSED) + int action) { virQEMUDriver *driver; virObjectEvent *watchdogEvent = NULL; @@ -822,8 +813,7 @@ qemuProcessHandleIOError(qemuMonitor *mon G_GNUC_UNUSED, const char *diskAlias, const char *nodename, int action, - const char *reason, - void *opaque G_GNUC_UNUSED) + const char *reason) { virQEMUDriver *driver; virObjectEvent *ioErrorEvent = NULL; @@ -890,8 +880,7 @@ qemuProcessHandleBlockJob(qemuMonitor *mon G_GNUC_UNUSED, const char *diskAlias, int type, int status, - const char *error, - void *opaque G_GNUC_UNUSED) + const char *error) { qemuDomainObjPrivate *priv; virDomainDiskDef *disk; @@ -934,8 +923,7 @@ static void qemuProcessHandleJobStatusChange(qemuMonitor *mon G_GNUC_UNUSED, virDomainObj *vm, const char *jobname, - int status, - void *opaque G_GNUC_UNUSED) + int status) { qemuDomainObjPrivate *priv; qemuBlockJobData *job = NULL; @@ -989,8 +977,7 @@ qemuProcessHandleGraphics(qemuMonitor *mon G_GNUC_UNUSED, const char *remoteService, const char *authScheme, const char *x509dname, - const char *saslUsername, - void *opaque G_GNUC_UNUSED) + const char *saslUsername) { virQEMUDriver *driver; virObjectEvent *event; @@ -1035,8 +1022,7 @@ qemuProcessHandleTrayChange(qemuMonitor *mon G_GNUC_UNUSED, virDomainObj *vm, const char *devAlias, const char *devid, - int reason, - void *opaque G_GNUC_UNUSED) + int reason) { virQEMUDriver *driver; virObjectEvent *event = NULL; @@ -1064,8 +1050,7 @@ qemuProcessHandleTrayChange(qemuMonitor *mon G_GNUC_UNUSED, static void qemuProcessHandlePMWakeup(qemuMonitor *mon G_GNUC_UNUSED, - virDomainObj *vm, - void *opaque G_GNUC_UNUSED) + virDomainObj *vm) { virQEMUDriver *driver; virObjectEvent *event = NULL; @@ -1097,8 +1082,7 @@ qemuProcessHandlePMWakeup(qemuMonitor *mon G_GNUC_UNUSED, static void qemuProcessHandlePMSuspend(qemuMonitor *mon G_GNUC_UNUSED, - virDomainObj *vm, - void *opaque G_GNUC_UNUSED) + virDomainObj *vm) { virQEMUDriver *driver; virObjectEvent *event = NULL; @@ -1134,8 +1118,7 @@ qemuProcessHandlePMSuspend(qemuMonitor *mon G_GNUC_UNUSED, static void qemuProcessHandleBalloonChange(qemuMonitor *mon G_GNUC_UNUSED, virDomainObj *vm, - unsigned long long actual, - void *opaque G_GNUC_UNUSED) + unsigned long long actual) { virQEMUDriver *driver; virObjectEvent *event = NULL; @@ -1168,8 +1151,7 @@ qemuProcessHandleBalloonChange(qemuMonitor *mon G_GNUC_UNUSED, static void qemuProcessHandlePMSuspendDisk(qemuMonitor *mon G_GNUC_UNUSED, - virDomainObj *vm, - void *opaque G_GNUC_UNUSED) + virDomainObj *vm) { virQEMUDriver *driver; virObjectEvent *event = NULL; @@ -1206,8 +1188,7 @@ qemuProcessHandlePMSuspendDisk(qemuMonitor *mon G_GNUC_UNUSED, static void qemuProcessHandleGuestPanic(qemuMonitor *mon G_GNUC_UNUSED, virDomainObj *vm, - qemuMonitorEventPanicInfo *info, - void *opaque G_GNUC_UNUSED) + qemuMonitorEventPanicInfo *info) { virObjectLock(vm); @@ -1221,8 +1202,7 @@ qemuProcessHandleGuestPanic(qemuMonitor *mon G_GNUC_UNUSED, void qemuProcessHandleDeviceDeleted(qemuMonitor *mon G_GNUC_UNUSED, virDomainObj *vm, - const char *devAlias, - void *opaque G_GNUC_UNUSED) + const char *devAlias) { virObjectLock(vm); @@ -1245,8 +1225,7 @@ static void qemuProcessHandleDeviceUnplugErr(qemuMonitor *mon G_GNUC_UNUSED, virDomainObj *vm, const char *devPath, - const char *devAlias, - void *opaque G_GNUC_UNUSED) + const char *devAlias) { virQEMUDriver *driver; virObjectEvent *event = NULL; @@ -1341,8 +1320,7 @@ qemuProcessHandleAcpiOstInfo(qemuMonitor *mon G_GNUC_UNUSED, const char *slotType, const char *slot, unsigned int source, - unsigned int status, - void *opaque G_GNUC_UNUSED) + unsigned int status) { virQEMUDriver *driver; virObjectEvent *event = NULL; @@ -1378,8 +1356,7 @@ qemuProcessHandleBlockThreshold(qemuMonitor *mon G_GNUC_UNUSED, virDomainObj *vm, const char *nodename, unsigned long long threshold, - unsigned long long excess, - void *opaque G_GNUC_UNUSED) + unsigned long long excess) { qemuDomainObjPrivate *priv; virQEMUDriver *driver; @@ -1427,8 +1404,7 @@ qemuProcessHandleBlockThreshold(qemuMonitor *mon G_GNUC_UNUSED, static void qemuProcessHandleNicRxFilterChanged(qemuMonitor *mon G_GNUC_UNUSED, virDomainObj *vm, - const char *devAlias, - void *opaque G_GNUC_UNUSED) + const char *devAlias) { virObjectLock(vm); @@ -1446,8 +1422,7 @@ static void qemuProcessHandleSerialChanged(qemuMonitor *mon G_GNUC_UNUSED, virDomainObj *vm, const char *devAlias, - bool connected, - void *opaque G_GNUC_UNUSED) + bool connected) { virObjectLock(vm); @@ -1463,8 +1438,7 @@ qemuProcessHandleSerialChanged(qemuMonitor *mon G_GNUC_UNUSED, static void qemuProcessHandleSpiceMigrated(qemuMonitor *mon G_GNUC_UNUSED, - virDomainObj *vm, - void *opaque G_GNUC_UNUSED) + virDomainObj *vm) { qemuDomainObjPrivate *priv; qemuDomainJobPrivate *jobPriv; @@ -1492,8 +1466,7 @@ qemuProcessHandleSpiceMigrated(qemuMonitor *mon G_GNUC_UNUSED, static void qemuProcessHandleMigrationStatus(qemuMonitor *mon G_GNUC_UNUSED, virDomainObj *vm, - int status, - void *opaque G_GNUC_UNUSED) + int status) { qemuDomainObjPrivate *priv; qemuDomainJobDataPrivate *privJob = NULL; @@ -1544,8 +1517,7 @@ qemuProcessHandleMigrationStatus(qemuMonitor *mon G_GNUC_UNUSED, static void qemuProcessHandleMigrationPass(qemuMonitor *mon G_GNUC_UNUSED, virDomainObj *vm, - int pass, - void *opaque G_GNUC_UNUSED) + int pass) { qemuDomainObjPrivate *priv; @@ -1573,8 +1545,7 @@ qemuProcessHandleDumpCompleted(qemuMonitor *mon G_GNUC_UNUSED, virDomainObj *vm, int status, qemuMonitorDumpStats *stats, - const char *error, - void *opaque G_GNUC_UNUSED) + const char *error) { qemuDomainObjPrivate *priv; qemuDomainJobPrivate *jobPriv; @@ -1614,8 +1585,7 @@ static void qemuProcessHandlePRManagerStatusChanged(qemuMonitor *mon G_GNUC_UNUSED, virDomainObj *vm, const char *prManager, - bool connected, - void *opaque G_GNUC_UNUSED) + bool connected) { qemuDomainObjPrivate *priv; const char *managedAlias = qemuDomainGetManagedPRAlias(); @@ -1654,8 +1624,7 @@ qemuProcessHandleRdmaGidStatusChanged(qemuMonitor *mon G_GNUC_UNUSED, const char *netdev, bool gid_status, unsigned long long subnet_prefix, - unsigned long long interface_id, - void *opaque G_GNUC_UNUSED) + unsigned long long interface_id) { qemuMonitorRdmaGidStatus *info = NULL; @@ -1681,8 +1650,7 @@ qemuProcessHandleRdmaGidStatusChanged(qemuMonitor *mon G_GNUC_UNUSED, static void qemuProcessHandleGuestCrashloaded(qemuMonitor *mon G_GNUC_UNUSED, - virDomainObj *vm, - void *opaque G_GNUC_UNUSED) + virDomainObj *vm) { virObjectLock(vm); @@ -1696,8 +1664,7 @@ qemuProcessHandleGuestCrashloaded(qemuMonitor *mon G_GNUC_UNUSED, static void qemuProcessHandleMemoryFailure(qemuMonitor *mon G_GNUC_UNUSED, virDomainObj *vm, - qemuMonitorEventMemoryFailure *mfp, - void *opaque G_GNUC_UNUSED) + qemuMonitorEventMemoryFailure *mfp) { virQEMUDriver *driver; virObjectEvent *event = NULL; @@ -1755,8 +1722,7 @@ static void qemuProcessHandleMemoryDeviceSizeChange(qemuMonitor *mon G_GNUC_UNUSED, virDomainObj *vm, const char *devAlias, - unsigned long long size, - void *opaque G_GNUC_UNUSED) + unsigned long long size) { qemuMonitorMemoryDeviceSizeChange *info = NULL; @@ -1876,8 +1842,7 @@ qemuConnectMonitor(virQEMUDriver *driver, retry, timeout, virEventThreadGetContext(priv->eventThread), - &monitorCallbacks, - driver); + &monitorCallbacks); if (mon && logCtxt) { g_object_ref(logCtxt); @@ -9059,8 +9024,7 @@ qemuProcessReconnectAll(virQEMUDriver *driver) static void virQEMUCapsMonitorNotify(qemuMonitor *mon G_GNUC_UNUSED, - virDomainObj *vm G_GNUC_UNUSED, - void *opaque G_GNUC_UNUSED) + virDomainObj *vm G_GNUC_UNUSED) { } @@ -9343,7 +9307,7 @@ qemuProcessQMPConnectMonitor(qemuProcessQMP *proc) if (!(proc->mon = qemuMonitorOpen(proc->vm, &monConfig, true, 0, virEventThreadGetContext(proc->eventThread), - &callbacks, NULL))) + &callbacks))) return -1; virObjectLock(proc->mon); diff --git a/src/qemu/qemu_processpriv.h b/src/qemu/qemu_processpriv.h index 9cb176e97c..0ba5897f40 100644 --- a/src/qemu/qemu_processpriv.h +++ b/src/qemu/qemu_processpriv.h @@ -34,7 +34,6 @@ void qemuProcessHandleDeviceDeleted(qemuMonitor *mon, virDomainObj *vm, - const char *devAlias, - void *opaque); + const char *devAlias); int qemuProcessQMPInitMonitor(qemuMonitor *mon); diff --git a/tests/qemuhotplugtest.c b/tests/qemuhotplugtest.c index fe8f0b58db..21123b88ed 100644 --- a/tests/qemuhotplugtest.c +++ b/tests/qemuhotplugtest.c @@ -298,8 +298,7 @@ testQemuHotplug(const void *data) /* Now is the best time to feed the spoofed monitor with predefined * replies. */ - if (!(test_mon = qemuMonitorTestNew(driver.xmlopt, vm, &driver, - NULL, NULL))) + if (!(test_mon = qemuMonitorTestNew(driver.xmlopt, vm, NULL, NULL))) goto cleanup; tmp = test->mon; diff --git a/tests/qemumonitortestutils.c b/tests/qemumonitortestutils.c index 86300da68a..ddd7d91b13 100644 --- a/tests/qemumonitortestutils.c +++ b/tests/qemumonitortestutils.c @@ -953,16 +953,14 @@ qemuMonitorTestAddItemExpect(qemuMonitorTest *test, static void qemuMonitorTestEOFNotify(qemuMonitor *mon G_GNUC_UNUSED, - virDomainObj *vm G_GNUC_UNUSED, - void *opaque G_GNUC_UNUSED) + virDomainObj *vm G_GNUC_UNUSED) { } static void qemuMonitorTestErrorNotify(qemuMonitor *mon G_GNUC_UNUSED, - virDomainObj *vm G_GNUC_UNUSED, - void *opaque G_GNUC_UNUSED) + virDomainObj *vm G_GNUC_UNUSED) { } @@ -1096,7 +1094,6 @@ qemuMonitorCommonTestInit(qemuMonitorTest *test) qemuMonitorTest * qemuMonitorTestNew(virDomainXMLOption *xmlopt, virDomainObj *vm, - virQEMUDriver *driver, const char *greeting, GHashTable *schema) { @@ -1117,8 +1114,7 @@ qemuMonitorTestNew(virDomainXMLOption *xmlopt, true, 0, virEventThreadGetContext(test->eventThread), - &qemuMonitorTestCallbacks, - driver))) + &qemuMonitorTestCallbacks))) goto error; virObjectLock(test->mon); @@ -1190,7 +1186,7 @@ qemuMonitorTestNewFromFile(const char *fileName, return NULL; } else { /* Create new mocked monitor with our greeting */ - if (!(test = qemuMonitorTestNew(xmlopt, NULL, NULL, + if (!(test = qemuMonitorTestNew(xmlopt, NULL, singleReply, NULL))) return NULL; } @@ -1390,8 +1386,7 @@ qemuMonitorTestNewFromFileFull(const char *fileName, if (virTestLoadFile(fileName, &jsonstr) < 0) return NULL; - if (!(ret = qemuMonitorTestNew(driver->xmlopt, vm, driver, NULL, - qmpschema))) + if (!(ret = qemuMonitorTestNew(driver->xmlopt, vm, NULL, qmpschema))) return NULL; if (qemuMonitorTestProcessFileEntries(jsonstr, fileName, &items, &nitems) < 0) diff --git a/tests/qemumonitortestutils.h b/tests/qemumonitortestutils.h index 56e3d56056..935f9d1e1a 100644 --- a/tests/qemumonitortestutils.h +++ b/tests/qemumonitortestutils.h @@ -90,14 +90,13 @@ qemuMonitorTestAddItemExpect(qemuMonitorTest *test, const char *response); #define qemuMonitorTestNewSimple(xmlopt) \ - qemuMonitorTestNew(xmlopt, NULL, NULL, NULL, NULL) + qemuMonitorTestNew(xmlopt, NULL, NULL, NULL) #define qemuMonitorTestNewSchema(xmlopt, schema) \ - qemuMonitorTestNew(xmlopt, NULL, NULL, NULL, schema) + qemuMonitorTestNew(xmlopt, NULL, NULL, schema) qemuMonitorTest * qemuMonitorTestNew(virDomainXMLOption *xmlopt, virDomainObj *vm, - virQEMUDriver *driver, const char *greeting, GHashTable *schema); -- 2.35.1

On 5/24/22 15:35, Jiri Denemark wrote:
Jiri Denemark (6): qemu: Avoid unlocked access to vm object in monitor callbacks qemu: Pass arguments to qemuProcessEventSubmit directly qemu: Make vm parameter of qemuProcessEventSubmit mandatory qemu: Drop driver parameter from qemuProcessEventSubmit qemu: Do not use opaque pointer in QEMU monitor callbacks qemu: Do not pass unused opaque pointer to monitor callbacks
src/qemu/qemu_monitor.c | 16 +- src/qemu/qemu_monitor.h | 108 ++++------ src/qemu/qemu_monitor_priv.h | 1 - src/qemu/qemu_process.c | 384 +++++++++++++---------------------- src/qemu/qemu_processpriv.h | 3 +- tests/qemuhotplugtest.c | 3 +- tests/qemumonitortestutils.c | 15 +- tests/qemumonitortestutils.h | 5 +- 8 files changed, 191 insertions(+), 344 deletions(-)
Reviewed-by: Michal Privoznik <mprivozn@redhat.com> Michal
participants (2)
-
Jiri Denemark
-
Michal Prívozník