[libvirt] [PATCH 01/17] qemu: Typedef monitor callbacks

Jiri Denemark jdenemar at redhat.com
Thu Aug 1 19:28:10 UTC 2013


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




More information about the libvir-list mailing list