Otherwise defining variables that hold callbacks pointers is ugly and several places have to be changed when new parameters are added. --- src/qemu/qemu_monitor.c | 6 +- src/qemu/qemu_monitor.h | 171 +++++++++++++++++++++++++++--------------------- 2 files changed, 98 insertions(+), 79 deletions(-) diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c index 5b2fb04..2801c9c 100644 --- a/src/qemu/qemu_monitor.c +++ b/src/qemu/qemu_monitor.c @@ -660,8 +660,7 @@ qemuMonitorIO(int watch, int fd, int events, void *opaque) { * but is this safe ? I think it is, because the callback * will try to acquire the virDomainObjPtr mutex next */ if (eof) { - void (*eofNotify)(qemuMonitorPtr, virDomainObjPtr) - = mon->cb->eofNotify; + qemuMonitorEofNotifyCallback eofNotify = mon->cb->eofNotify; virDomainObjPtr vm = mon->vm; /* Make sure anyone waiting wakes up now */ @@ -671,8 +670,7 @@ qemuMonitorIO(int watch, int fd, int events, void *opaque) { VIR_DEBUG("Triggering EOF callback"); (eofNotify)(mon, vm); } else if (error) { - void (*errorNotify)(qemuMonitorPtr, virDomainObjPtr) - = mon->cb->errorNotify; + qemuMonitorErrorNotifyCallback errorNotify = mon->cb->errorNotify; virDomainObjPtr vm = mon->vm; /* Make sure anyone waiting wakes up now */ diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h index 4a55501..9e12788 100644 --- a/src/qemu/qemu_monitor.h +++ b/src/qemu/qemu_monitor.h @@ -67,84 +67,105 @@ struct _qemuMonitorMessage { void *passwordOpaque; }; + +typedef void (*qemuMonitorDestroyCallback)(qemuMonitorPtr mon, + virDomainObjPtr vm); +typedef void (*qemuMonitorEofNotifyCallback)(qemuMonitorPtr mon, + virDomainObjPtr vm); +typedef void (*qemuMonitorErrorNotifyCallback)(qemuMonitorPtr mon, + virDomainObjPtr vm); +/* XXX we'd really like to avoid virConnectPtr here + * It is required so the callback can find the active + * secret driver. Need to change this to work like the + * security drivers do, to avoid this + */ +typedef int (*qemuMonitorDiskSecretLookupCallback)(qemuMonitorPtr mon, + virConnectPtr conn, + virDomainObjPtr vm, + const char *path, + char **secret, + size_t *secretLen); +typedef int (*qemuMonitorDomainShutdownCallback)(qemuMonitorPtr mon, + virDomainObjPtr vm); +typedef int (*qemuMonitorDomainResetCallback)(qemuMonitorPtr mon, + virDomainObjPtr vm); +typedef int (*qemuMonitorDomainPowerdownCallback)(qemuMonitorPtr mon, + virDomainObjPtr vm); +typedef int (*qemuMonitorDomainStopCallback)(qemuMonitorPtr mon, + virDomainObjPtr vm); +typedef int (*qemuMonitorDomainResumeCallback)(qemuMonitorPtr mon, + virDomainObjPtr vm); +typedef int (*qemuMonitorDomainRTCChangeCallback)(qemuMonitorPtr mon, + virDomainObjPtr vm, + long long offset); +typedef int (*qemuMonitorDomainWatchdogCallback)(qemuMonitorPtr mon, + virDomainObjPtr vm, + int action); +typedef int (*qemuMonitorDomainIOErrorCallback)(qemuMonitorPtr mon, + virDomainObjPtr vm, + const char *diskAlias, + int action, + const char *reason); +typedef int (*qemuMonitorDomainGraphicsCallback)(qemuMonitorPtr mon, + virDomainObjPtr vm, + int phase, + int localFamily, + const char *localNode, + const char *localService, + int remoteFamily, + const char *remoteNode, + const char *remoteService, + const char *authScheme, + const char *x509dname, + const char *saslUsername); +typedef int (*qemuMonitorDomainBlockJobCallback)(qemuMonitorPtr mon, + virDomainObjPtr vm, + const char *diskAlias, + int type, + int status); +typedef int (*qemuMonitorDomainTrayChangeCallback)(qemuMonitorPtr mon, + virDomainObjPtr vm, + const char *devAlias, + int reason); +typedef int (*qemuMonitorDomainPMWakeupCallback)(qemuMonitorPtr mon, + virDomainObjPtr vm); +typedef int (*qemuMonitorDomainPMSuspendCallback)(qemuMonitorPtr mon, + virDomainObjPtr vm); +typedef int (*qemuMonitorDomainBalloonChangeCallback)(qemuMonitorPtr mon, + virDomainObjPtr vm, + unsigned long long actual); +typedef int (*qemuMonitorDomainPMSuspendDiskCallback)(qemuMonitorPtr mon, + virDomainObjPtr vm); +typedef int (*qemuMonitorDomainGuestPanicCallback)(qemuMonitorPtr mon, + virDomainObjPtr vm); +typedef int (*qemuMonitorDomainDeviceDeletedCallback)(qemuMonitorPtr mon, + virDomainObjPtr vm, + const char *devAlias); + typedef struct _qemuMonitorCallbacks qemuMonitorCallbacks; typedef qemuMonitorCallbacks *qemuMonitorCallbacksPtr; struct _qemuMonitorCallbacks { - void (*destroy)(qemuMonitorPtr mon, - virDomainObjPtr vm); - - void (*eofNotify)(qemuMonitorPtr mon, - virDomainObjPtr vm); - void (*errorNotify)(qemuMonitorPtr mon, - virDomainObjPtr vm); - /* XXX we'd really like to avoid virConnectPtr here - * It is required so the callback can find the active - * secret driver. Need to change this to work like the - * security drivers do, to avoid this - */ - int (*diskSecretLookup)(qemuMonitorPtr mon, - virConnectPtr conn, - virDomainObjPtr vm, - const char *path, - char **secret, - size_t *secretLen); - - int (*domainShutdown)(qemuMonitorPtr mon, - virDomainObjPtr vm); - int (*domainReset)(qemuMonitorPtr mon, - virDomainObjPtr vm); - int (*domainPowerdown)(qemuMonitorPtr mon, - virDomainObjPtr vm); - int (*domainStop)(qemuMonitorPtr mon, - virDomainObjPtr vm); - int (*domainResume)(qemuMonitorPtr mon, - virDomainObjPtr vm); - int (*domainRTCChange)(qemuMonitorPtr mon, - virDomainObjPtr vm, - long long offset); - int (*domainWatchdog)(qemuMonitorPtr mon, - virDomainObjPtr vm, - int action); - int (*domainIOError)(qemuMonitorPtr mon, - virDomainObjPtr vm, - const char *diskAlias, - int action, - const char *reason); - int (*domainGraphics)(qemuMonitorPtr mon, - virDomainObjPtr vm, - int phase, - int localFamily, - const char *localNode, - const char *localService, - int remoteFamily, - const char *remoteNode, - const char *remoteService, - const char *authScheme, - const char *x509dname, - const char *saslUsername); - int (*domainBlockJob)(qemuMonitorPtr mon, - virDomainObjPtr vm, - const char *diskAlias, - int type, - int status); - int (*domainTrayChange)(qemuMonitorPtr mon, - virDomainObjPtr vm, - const char *devAlias, - int reason); - int (*domainPMWakeup)(qemuMonitorPtr mon, - virDomainObjPtr vm); - int (*domainPMSuspend)(qemuMonitorPtr mon, - virDomainObjPtr vm); - int (*domainBalloonChange)(qemuMonitorPtr mon, - virDomainObjPtr vm, - unsigned long long actual); - int (*domainPMSuspendDisk)(qemuMonitorPtr mon, - virDomainObjPtr vm); - int (*domainGuestPanic)(qemuMonitorPtr mon, - virDomainObjPtr vm); - int (*domainDeviceDeleted)(qemuMonitorPtr mon, - virDomainObjPtr vm, - const char *devAlias); + qemuMonitorDestroyCallback destroy; + qemuMonitorEofNotifyCallback eofNotify; + qemuMonitorErrorNotifyCallback errorNotify; + qemuMonitorDiskSecretLookupCallback diskSecretLookup; + qemuMonitorDomainShutdownCallback domainShutdown; + qemuMonitorDomainResetCallback domainReset; + qemuMonitorDomainPowerdownCallback domainPowerdown; + qemuMonitorDomainStopCallback domainStop; + qemuMonitorDomainResumeCallback domainResume; + qemuMonitorDomainRTCChangeCallback domainRTCChange; + qemuMonitorDomainWatchdogCallback domainWatchdog; + qemuMonitorDomainIOErrorCallback domainIOError; + qemuMonitorDomainGraphicsCallback domainGraphics; + qemuMonitorDomainBlockJobCallback domainBlockJob; + qemuMonitorDomainTrayChangeCallback domainTrayChange; + qemuMonitorDomainPMWakeupCallback domainPMWakeup; + qemuMonitorDomainPMSuspendCallback domainPMSuspend; + qemuMonitorDomainBalloonChangeCallback domainBalloonChange; + qemuMonitorDomainPMSuspendDiskCallback domainPMSuspendDisk; + qemuMonitorDomainGuestPanicCallback domainGuestPanic; + qemuMonitorDomainDeviceDeletedCallback domainDeviceDeleted; }; char *qemuMonitorEscapeArg(const char *in); -- 1.8.3.2 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list