]> xenbits.xensource.com Git - people/dariof/libvirt.git/commitdiff
Create virDomainEventBalloonChange to get rid of the huge union
authorCédric Bosdonnat <cbosdonnat@suse.com>
Fri, 22 Nov 2013 10:08:20 +0000 (11:08 +0100)
committerDaniel P. Berrange <berrange@redhat.com>
Tue, 10 Dec 2013 12:38:03 +0000 (12:38 +0000)
src/conf/domain_event.c

index c912d8cb1477b2d5638e6519506650cde602bb5c..6e60ec449cab4428fb90302ab5106293b90bcef6 100644 (file)
@@ -93,6 +93,7 @@ static virClassPtr virDomainEventGraphicsClass;
 static virClassPtr virDomainEventBlockJobClass;
 static virClassPtr virDomainEventDiskChangeClass;
 static virClassPtr virDomainEventTrayChangeClass;
+static virClassPtr virDomainEventBalloonChangeClass;
 
 static void virObjectEventDispose(void *obj);
 static void virDomainEventDispose(void *obj);
@@ -104,6 +105,7 @@ static void virDomainEventGraphicsDispose(void *obj);
 static void virDomainEventBlockJobDispose(void *obj);
 static void virDomainEventDiskChangeDispose(void *obj);
 static void virDomainEventTrayChangeDispose(void *obj);
+static void virDomainEventBalloonChangeDispose(void *obj);
 
 struct _virObjectEvent {
     virObject parent;
@@ -116,10 +118,6 @@ struct _virDomainEvent {
     virObjectMeta meta;
 
     union {
-        struct {
-            /* In unit of 1024 bytes */
-            unsigned long long actual;
-        } balloonChange;
         struct {
             char *devAlias;
         } deviceRemoved;
@@ -204,6 +202,15 @@ struct _virDomainEventTrayChange {
 typedef struct _virDomainEventTrayChange virDomainEventTrayChange;
 typedef virDomainEventTrayChange *virDomainEventTrayChangePtr;
 
+struct _virDomainEventBalloonChange {
+    virDomainEvent parent;
+
+    /* In unit of 1024 bytes */
+    unsigned long long actual;
+};
+typedef struct _virDomainEventBalloonChange virDomainEventBalloonChange;
+typedef virDomainEventBalloonChange *virDomainEventBalloonChangePtr;
+
 
 static int virObjectEventOnceInit(void)
 {
@@ -267,6 +274,12 @@ static int virObjectEventOnceInit(void)
                       sizeof(virDomainEventTrayChange),
                       virDomainEventTrayChangeDispose)))
         return -1;
+    if (!(virDomainEventBalloonChangeClass =
+          virClassNew(virDomainEventClass,
+                      "virDomainEventBalloonChange",
+                      sizeof(virDomainEventBalloonChange),
+                      virDomainEventBalloonChangeDispose)))
+        return -1;
     return 0;
 }
 
@@ -387,6 +400,12 @@ static void virDomainEventTrayChangeDispose(void *obj)
     VIR_FREE(event->devAlias);
 }
 
+static void virDomainEventBalloonChangeDispose(void *obj)
+{
+    virDomainEventBalloonChangePtr event = obj;
+    VIR_DEBUG("obj=%p", event);
+}
+
 /**
  * virObjectEventCallbackListFree:
  * @list: event callback list head
@@ -1486,36 +1505,36 @@ virDomainEventPMSuspendDiskNewFromDom(virDomainPtr dom)
 virDomainEventPtr virDomainEventBalloonChangeNewFromDom(virDomainPtr dom,
                                                         unsigned long long actual)
 {
-    virDomainEventPtr ev;
+    virDomainEventBalloonChangePtr ev;
 
     if (virObjectEventInitialize() < 0)
         return NULL;
 
-    if (!(ev = virDomainEventNew(virDomainEventClass,
+    if (!(ev = virDomainEventNew(virDomainEventBalloonChangeClass,
                                  VIR_DOMAIN_EVENT_ID_BALLOON_CHANGE,
                                  dom->id, dom->name, dom->uuid)))
         return NULL;
 
-    ev->data.balloonChange.actual = actual;
+    ev->actual = actual;
 
-    return ev;
+    return (virDomainEventPtr)ev;
 }
 virDomainEventPtr virDomainEventBalloonChangeNewFromObj(virDomainObjPtr obj,
                                                         unsigned long long actual)
 {
-    virDomainEventPtr ev;
+    virDomainEventBalloonChangePtr ev;
 
     if (virObjectEventInitialize() < 0)
         return NULL;
 
-    if (!(ev = virDomainEventNew(virDomainEventClass,
+    if (!(ev = virDomainEventNew(virDomainEventBalloonChangeClass,
                                  VIR_DOMAIN_EVENT_ID_BALLOON_CHANGE,
                                  obj->def->id, obj->def->name, obj->def->uuid)))
         return NULL;
 
-    ev->data.balloonChange.actual = actual;
+    ev->actual = actual;
 
-    return ev;
+    return (virDomainEventPtr)ev;
 }
 
 static virDomainEventPtr
@@ -1743,10 +1762,15 @@ virDomainEventDispatchDefaultFunc(virConnectPtr conn,
         goto cleanup;
 
     case VIR_DOMAIN_EVENT_ID_BALLOON_CHANGE:
-        ((virConnectDomainEventBalloonChangeCallback)cb)(conn, dom,
-                                                         event->data.balloonChange.actual,
-                                                         cbopaque);
-        goto cleanup;
+        {
+            virDomainEventBalloonChangePtr balloonChangeEvent;
+
+            balloonChangeEvent = (virDomainEventBalloonChangePtr)event;
+            ((virConnectDomainEventBalloonChangeCallback)cb)(conn, dom,
+                                                             balloonChangeEvent->actual,
+                                                             cbopaque);
+            goto cleanup;
+        }
 
     case VIR_DOMAIN_EVENT_ID_PMSUSPEND_DISK:
         ((virConnectDomainEventPMSuspendDiskCallback)cb)(conn, dom, 0, cbopaque);