[libvirt] [PATCH 14/34] Created virDomainEventIOError

Cédric Bosdonnat cbosdonnat at suse.com
Fri Nov 29 15:18:50 UTC 2013


---
 src/conf/domain_event.c | 161 ++++++++++++++++++++++++++++--------------------
 src/conf/domain_event.h |  36 +++++------
 2 files changed, 112 insertions(+), 85 deletions(-)

diff --git a/src/conf/domain_event.c b/src/conf/domain_event.c
index 8d08d2f..21494e5 100644
--- a/src/conf/domain_event.c
+++ b/src/conf/domain_event.c
@@ -83,11 +83,13 @@ static virClassPtr virDomainEventClass;
 static virClassPtr virDomainEventLifecycleClass;
 static virClassPtr virDomainEventRTCChangeClass;
 static virClassPtr virDomainEventWatchdogClass;
+static virClassPtr virDomainEventIOErrorClass;
 static void virObjectEventDispose(void *obj);
 static void virDomainEventDispose(void *obj);
 static void virDomainEventLifecycleDispose(void *obj);
 static void virDomainEventRTCChangeDispose(void *obj);
 static void virDomainEventWatchdogDispose(void *obj);
+static void virDomainEventIOErrorDispose(void *obj);
 
 struct _virObjectEvent {
     virObject parent;
@@ -101,12 +103,6 @@ struct _virDomainEvent {
 
     union {
         struct {
-            char *srcPath;
-            char *devAlias;
-            int action;
-            char *reason;
-        } ioError;
-        struct {
             int phase;
             virDomainEventGraphicsAddressPtr local;
             virDomainEventGraphicsAddressPtr remote;
@@ -163,6 +159,17 @@ struct _virDomainEventWatchdog {
 typedef struct _virDomainEventWatchdog virDomainEventWatchdog;
 typedef virDomainEventWatchdog *virDomainEventWatchdogPtr;
 
+struct _virDomainEventIOError {
+    virDomainEvent parent;
+
+    char *srcPath;
+    char *devAlias;
+    int action;
+    char *reason;
+};
+typedef struct _virDomainEventIOError virDomainEventIOError;
+typedef virDomainEventIOError *virDomainEventIOErrorPtr;
+
 static int virObjectEventOnceInit(void)
 {
     if (!(virObjectEventClass = virClassNew(virClassForObject(),
@@ -193,6 +200,12 @@ static int virObjectEventOnceInit(void)
                                              sizeof(virDomainEventWatchdog),
                                              virDomainEventWatchdogDispose)))
         return -1;
+    if (!(virDomainEventIOErrorClass = virClassNew(
+                                             virDomainEventClass,
+                                             "virDomainEventIOError",
+                                             sizeof(virDomainEventIOError),
+                                             virDomainEventIOErrorDispose)))
+        return -1;
     return 0;
 }
 
@@ -227,12 +240,6 @@ static void virDomainEventDispose(void *obj)
         return;
 
     switch (virObjectEventGetEventID(event)) {
-    case VIR_DOMAIN_EVENT_ID_IO_ERROR_REASON:
-    case VIR_DOMAIN_EVENT_ID_IO_ERROR:
-        VIR_FREE(event->data.ioError.srcPath);
-        VIR_FREE(event->data.ioError.devAlias);
-        VIR_FREE(event->data.ioError.reason);
-        break;
 
     case VIR_DOMAIN_EVENT_ID_GRAPHICS:
         if (event->data.graphics.local) {
@@ -294,6 +301,16 @@ static void virDomainEventWatchdogDispose(void *obj)
     VIR_DEBUG("obj=%p", event);
 }
 
+static void virDomainEventIOErrorDispose(void *obj)
+{
+    virDomainEventIOErrorPtr event = obj;
+    VIR_DEBUG("obj=%p", event);
+
+    VIR_FREE(event->srcPath);
+    VIR_FREE(event->devAlias);
+    VIR_FREE(event->reason);
+}
+
 /**
  * virObjectEventCallbackListFree:
  * @list: event callback list head
@@ -961,26 +978,26 @@ void *virDomainEventWatchdogNewFromObj(virDomainObjPtr obj, int action)
     return ev;
 }
 
-static virDomainEventPtr virDomainEventIOErrorNewFromDomImpl(int event,
-                                                             virDomainPtr dom,
-                                                             const char *srcPath,
-                                                             const char *devAlias,
-                                                             int action,
-                                                             const char *reason)
+static void *virDomainEventIOErrorNewFromDomImpl(int event,
+                                                 virDomainPtr dom,
+                                                 const char *srcPath,
+                                                 const char *devAlias,
+                                                 int action,
+                                                 const char *reason)
 {
-    virDomainEventPtr ev;
+    virDomainEventIOErrorPtr ev;
 
     if (virObjectEventInitialize() < 0)
         return NULL;
 
-    if (!(ev = virDomainEventNew(virDomainEventClass, event,
+    if (!(ev = virDomainEventNew(virDomainEventIOErrorClass, event,
                                  dom->id, dom->name, dom->uuid)))
         return NULL;
 
-    ev->data.ioError.action = action;
-    if (VIR_STRDUP(ev->data.ioError.srcPath, srcPath) < 0 ||
-        VIR_STRDUP(ev->data.ioError.devAlias, devAlias) < 0 ||
-        VIR_STRDUP(ev->data.ioError.reason, reason) < 0) {
+    ev->action = action;
+    if (VIR_STRDUP(ev->srcPath, srcPath) < 0 ||
+        VIR_STRDUP(ev->devAlias, devAlias) < 0 ||
+        VIR_STRDUP(ev->reason, reason) < 0) {
         virObjectUnref(ev);
         ev = NULL;
     }
@@ -988,27 +1005,27 @@ static virDomainEventPtr virDomainEventIOErrorNewFromDomImpl(int event,
     return ev;
 }
 
-static virDomainEventPtr virDomainEventIOErrorNewFromObjImpl(int event,
-                                                             virDomainObjPtr obj,
-                                                             const char *srcPath,
-                                                             const char *devAlias,
-                                                             int action,
-                                                             const char *reason)
+static void *virDomainEventIOErrorNewFromObjImpl(int event,
+                                                 virDomainObjPtr obj,
+                                                 const char *srcPath,
+                                                 const char *devAlias,
+                                                 int action,
+                                                 const char *reason)
 {
-    virDomainEventPtr ev;
+    virDomainEventIOErrorPtr ev;
 
     if (virObjectEventInitialize() < 0)
         return NULL;
 
-    if (!(ev = virDomainEventNew(virDomainEventClass, event,
+    if (!(ev = virDomainEventNew(virDomainEventIOErrorClass, event,
                                  obj->def->id, obj->def->name,
                                  obj->def->uuid)))
         return NULL;
 
-    ev->data.ioError.action = action;
-    if (VIR_STRDUP(ev->data.ioError.srcPath, srcPath) < 0 ||
-        VIR_STRDUP(ev->data.ioError.devAlias, devAlias) < 0 ||
-        VIR_STRDUP(ev->data.ioError.reason, reason) < 0) {
+    ev->action = action;
+    if (VIR_STRDUP(ev->srcPath, srcPath) < 0 ||
+        VIR_STRDUP(ev->devAlias, devAlias) < 0 ||
+        VIR_STRDUP(ev->reason, reason) < 0) {
         virObjectUnref(ev);
         ev = NULL;
     }
@@ -1016,42 +1033,42 @@ static virDomainEventPtr virDomainEventIOErrorNewFromObjImpl(int event,
     return ev;
 }
 
-virDomainEventPtr virDomainEventIOErrorNewFromDom(virDomainPtr dom,
-                                                  const char *srcPath,
-                                                  const char *devAlias,
-                                                  int action)
+void *virDomainEventIOErrorNewFromDom(virDomainPtr dom,
+                                      const char *srcPath,
+                                      const char *devAlias,
+                                      int action)
 {
     return virDomainEventIOErrorNewFromDomImpl(VIR_DOMAIN_EVENT_ID_IO_ERROR,
                                                dom, srcPath, devAlias,
                                                action, NULL);
 }
 
-virDomainEventPtr virDomainEventIOErrorNewFromObj(virDomainObjPtr obj,
-                                                  const char *srcPath,
-                                                  const char *devAlias,
-                                                  int action)
+void *virDomainEventIOErrorNewFromObj(virDomainObjPtr obj,
+                                      const char *srcPath,
+                                      const char *devAlias,
+                                      int action)
 {
     return virDomainEventIOErrorNewFromObjImpl(VIR_DOMAIN_EVENT_ID_IO_ERROR,
                                                obj, srcPath, devAlias,
                                                action, NULL);
 }
 
-virDomainEventPtr virDomainEventIOErrorReasonNewFromDom(virDomainPtr dom,
-                                                        const char *srcPath,
-                                                        const char *devAlias,
-                                                        int action,
-                                                        const char *reason)
+void *virDomainEventIOErrorReasonNewFromDom(virDomainPtr dom,
+                                            const char *srcPath,
+                                            const char *devAlias,
+                                            int action,
+                                            const char *reason)
 {
     return virDomainEventIOErrorNewFromDomImpl(VIR_DOMAIN_EVENT_ID_IO_ERROR_REASON,
                                                dom, srcPath, devAlias,
                                                action, reason);
 }
 
-virDomainEventPtr virDomainEventIOErrorReasonNewFromObj(virDomainObjPtr obj,
-                                                        const char *srcPath,
-                                                        const char *devAlias,
-                                                        int action,
-                                                        const char *reason)
+void *virDomainEventIOErrorReasonNewFromObj(virDomainObjPtr obj,
+                                            const char *srcPath,
+                                            const char *devAlias,
+                                            int action,
+                                            const char *reason)
 {
     return virDomainEventIOErrorNewFromObjImpl(VIR_DOMAIN_EVENT_ID_IO_ERROR_REASON,
                                                obj, srcPath, devAlias,
@@ -1552,21 +1569,31 @@ virDomainEventDispatchDefaultFunc(virConnectPtr conn,
         }
 
     case VIR_DOMAIN_EVENT_ID_IO_ERROR:
-        ((virConnectDomainEventIOErrorCallback)cb)(conn, dom,
-                                                   event->data.ioError.srcPath,
-                                                   event->data.ioError.devAlias,
-                                                   event->data.ioError.action,
-                                                   cbopaque);
-        goto cleanup;
+        {
+            virDomainEventIOErrorPtr ioErrorEvent;
+
+            ioErrorEvent = (virDomainEventIOErrorPtr)event;
+            ((virConnectDomainEventIOErrorCallback)cb)(conn, dom,
+                                                       ioErrorEvent->srcPath,
+                                                       ioErrorEvent->devAlias,
+                                                       ioErrorEvent->action,
+                                                       cbopaque);
+            goto cleanup;
+        }
 
     case VIR_DOMAIN_EVENT_ID_IO_ERROR_REASON:
-        ((virConnectDomainEventIOErrorReasonCallback)cb)(conn, dom,
-                                                         event->data.ioError.srcPath,
-                                                         event->data.ioError.devAlias,
-                                                         event->data.ioError.action,
-                                                         event->data.ioError.reason,
-                                                         cbopaque);
-        goto cleanup;
+        {
+            virDomainEventIOErrorPtr ioErrorEvent;
+
+            ioErrorEvent = (virDomainEventIOErrorPtr)event;
+            ((virConnectDomainEventIOErrorReasonCallback)cb)(conn, dom,
+                                                             ioErrorEvent->srcPath,
+                                                             ioErrorEvent->devAlias,
+                                                             ioErrorEvent->action,
+                                                             ioErrorEvent->reason,
+                                                             cbopaque);
+            goto cleanup;
+        }
 
     case VIR_DOMAIN_EVENT_ID_GRAPHICS:
         ((virConnectDomainEventGraphicsCallback)cb)(conn, dom,
diff --git a/src/conf/domain_event.h b/src/conf/domain_event.h
index b51ec97..45819dc 100644
--- a/src/conf/domain_event.h
+++ b/src/conf/domain_event.h
@@ -75,24 +75,24 @@ void *virDomainEventRTCChangeNewFromObj(virDomainObjPtr obj, long long offset);
 void *virDomainEventWatchdogNewFromDom(virDomainPtr dom, int action);
 void *virDomainEventWatchdogNewFromObj(virDomainObjPtr obj, int action);
 
-virDomainEventPtr virDomainEventIOErrorNewFromDom(virDomainPtr dom,
-                                                  const char *srcPath,
-                                                  const char *devAlias,
-                                                  int action);
-virDomainEventPtr virDomainEventIOErrorNewFromObj(virDomainObjPtr obj,
-                                                  const char *srcPath,
-                                                  const char *devAlias,
-                                                  int action);
-virDomainEventPtr virDomainEventIOErrorReasonNewFromDom(virDomainPtr dom,
-                                                        const char *srcPath,
-                                                        const char *devAlias,
-                                                        int action,
-                                                        const char *reason);
-virDomainEventPtr virDomainEventIOErrorReasonNewFromObj(virDomainObjPtr obj,
-                                                        const char *srcPath,
-                                                        const char *devAlias,
-                                                        int action,
-                                                        const char *reason);
+void *virDomainEventIOErrorNewFromDom(virDomainPtr dom,
+                                      const char *srcPath,
+                                      const char *devAlias,
+                                      int action);
+void *virDomainEventIOErrorNewFromObj(virDomainObjPtr obj,
+                                      const char *srcPath,
+                                      const char *devAlias,
+                                      int action);
+void *virDomainEventIOErrorReasonNewFromDom(virDomainPtr dom,
+                                            const char *srcPath,
+                                            const char *devAlias,
+                                            int action,
+                                            const char *reason);
+void *virDomainEventIOErrorReasonNewFromObj(virDomainObjPtr obj,
+                                            const char *srcPath,
+                                            const char *devAlias,
+                                            int action,
+                                            const char *reason);
 
 virDomainEventPtr virDomainEventGraphicsNewFromDom(virDomainPtr dom,
                                                    int phase,
-- 
1.8.4.2




More information about the libvir-list mailing list