--- src/conf/domain_event.c | 60 +++++++++++++++++++++++++++++++++---------------- 1 file changed, 41 insertions(+), 19 deletions(-) diff --git a/src/conf/domain_event.c b/src/conf/domain_event.c index ab38a3b..63119b2 100644 --- a/src/conf/domain_event.c +++ b/src/conf/domain_event.c @@ -87,10 +87,12 @@ static virClassPtr virObjectEventClass; static virClassPtr virDomainEventClass; static virClassPtr virDomainEventLifecycleClass; static virClassPtr virDomainEventRTCChangeClass; +static virClassPtr virDomainEventWatchdogClass; 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); struct _virObjectEvent { virObject parent; @@ -104,9 +106,6 @@ struct _virDomainEvent { union { struct { - int action; - } watchdog; - struct { char *srcPath; char *devAlias; int action; @@ -161,6 +160,14 @@ struct _virDomainEventRTCChange { typedef struct _virDomainEventRTCChange virDomainEventRTCChange; typedef virDomainEventRTCChange *virDomainEventRTCChangePtr; +struct _virDomainEventWatchdog { + virDomainEvent parent; + + int action; +}; +typedef struct _virDomainEventWatchdog virDomainEventWatchdog; +typedef virDomainEventWatchdog *virDomainEventWatchdogPtr; + static int virObjectEventOnceInit(void) { if (!(virObjectEventClass = virClassNew(virClassForObject(), @@ -185,6 +192,12 @@ static int virObjectEventOnceInit(void) sizeof(virDomainEventRTCChange), virDomainEventRTCChangeDispose))) return -1; + if (!(virDomainEventWatchdogClass = virClassNew( + virDomainEventClass, + "virDomainEventWatchdog", + sizeof(virDomainEventWatchdog), + virDomainEventWatchdogDispose))) + return -1; return 0; } @@ -277,6 +290,12 @@ static void virDomainEventRTCChangeDispose(void *obj) VIR_DEBUG("obj=%p", event); } +static void virDomainEventWatchdogDispose(void *obj) +{ + virDomainEventWatchdogPtr event = obj; + VIR_DEBUG("obj=%p", event); +} + /** * virObjectEventCallbackListFree: * @list: event callback list head @@ -910,40 +929,38 @@ virDomainEventPtr virDomainEventRTCChangeNewFromObj(virDomainObjPtr obj, return (virDomainEventPtr)ev; } -virDomainEventPtr virDomainEventWatchdogNewFromDom(virDomainPtr dom, - int action) +virDomainEventPtr virDomainEventWatchdogNewFromDom(virDomainPtr dom, int action) { - virDomainEventPtr ev; + virDomainEventWatchdogPtr ev; if (virObjectEventInitialize() < 0) return NULL; - if (!(ev = virDomainEventNew(virDomainEventClass, + if (!(ev = virDomainEventNew(virDomainEventWatchdogClass, VIR_DOMAIN_EVENT_ID_WATCHDOG, dom->id, dom->name, dom->uuid))) return NULL; - ev->data.watchdog.action = action; + ev->action = action; - return ev; + return (virDomainEventPtr)ev; } -virDomainEventPtr virDomainEventWatchdogNewFromObj(virDomainObjPtr obj, - int action) +virDomainEventPtr virDomainEventWatchdogNewFromObj(virDomainObjPtr obj, int action) { - virDomainEventPtr ev; + virDomainEventWatchdogPtr ev; if (virObjectEventInitialize() < 0) return NULL; - if (!(ev = virDomainEventNew(virDomainEventClass, + if (!(ev = virDomainEventNew(virDomainEventWatchdogClass, VIR_DOMAIN_EVENT_ID_WATCHDOG, obj->def->id, obj->def->name, obj->def->uuid))) return NULL; - ev->data.watchdog.action = action; + ev->action = action; - return ev; + return (virDomainEventPtr)ev; } static virDomainEventPtr virDomainEventIOErrorNewFromDomImpl(int event, @@ -1526,10 +1543,15 @@ virDomainEventDispatchDefaultFunc(virConnectPtr conn, } case VIR_DOMAIN_EVENT_ID_WATCHDOG: - ((virConnectDomainEventWatchdogCallback)cb)(conn, dom, - event->data.watchdog.action, - cbopaque); - goto cleanup; + { + virDomainEventWatchdogPtr watchdogEvent; + + watchdogEvent = (virDomainEventWatchdogPtr)event; + ((virConnectDomainEventWatchdogCallback)cb)(conn, dom, + watchdogEvent->action, + cbopaque); + goto cleanup; + } case VIR_DOMAIN_EVENT_ID_IO_ERROR: ((virConnectDomainEventIOErrorCallback)cb)(conn, dom, -- 1.8.4.4 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list