Create virDomainEventRTCChange to get rid of the huge union

This commit is contained in:
Cédric Bosdonnat 2013-11-22 09:18:47 +01:00 committed by Daniel P. Berrange
parent 2c0008cc3e
commit 8a29ffcf9a

View File

@ -86,9 +86,11 @@ struct _virObjectEventCallback {
static virClassPtr virObjectEventClass; static virClassPtr virObjectEventClass;
static virClassPtr virDomainEventClass; static virClassPtr virDomainEventClass;
static virClassPtr virDomainEventLifecycleClass; static virClassPtr virDomainEventLifecycleClass;
static virClassPtr virDomainEventRTCChangeClass;
static void virObjectEventDispose(void *obj); static void virObjectEventDispose(void *obj);
static void virDomainEventDispose(void *obj); static void virDomainEventDispose(void *obj);
static void virDomainEventLifecycleDispose(void *obj); static void virDomainEventLifecycleDispose(void *obj);
static void virDomainEventRTCChangeDispose(void *obj);
struct _virObjectEvent { struct _virObjectEvent {
virObject parent; virObject parent;
@ -101,9 +103,6 @@ struct _virDomainEvent {
virObjectMeta meta; virObjectMeta meta;
union { union {
struct {
long long offset;
} rtcChange;
struct { struct {
int action; int action;
} watchdog; } watchdog;
@ -154,6 +153,13 @@ struct _virDomainEventLifecycle {
typedef struct _virDomainEventLifecycle virDomainEventLifecycle; typedef struct _virDomainEventLifecycle virDomainEventLifecycle;
typedef virDomainEventLifecycle *virDomainEventLifecyclePtr; typedef virDomainEventLifecycle *virDomainEventLifecyclePtr;
struct _virDomainEventRTCChange {
virDomainEvent parent;
long long offset;
};
typedef struct _virDomainEventRTCChange virDomainEventRTCChange;
typedef virDomainEventRTCChange *virDomainEventRTCChangePtr;
static int virObjectEventOnceInit(void) static int virObjectEventOnceInit(void)
{ {
@ -175,6 +181,12 @@ static int virObjectEventOnceInit(void)
sizeof(virDomainEventLifecycle), sizeof(virDomainEventLifecycle),
virDomainEventLifecycleDispose))) virDomainEventLifecycleDispose)))
return -1; return -1;
if (!(virDomainEventRTCChangeClass =
virClassNew(virDomainEventClass,
"virDomainEventRTCChange",
sizeof(virDomainEventRTCChange),
virDomainEventRTCChangeDispose)))
return -1;
return 0; return 0;
} }
@ -261,6 +273,12 @@ static void virDomainEventLifecycleDispose(void *obj)
VIR_DEBUG("obj=%p", event); VIR_DEBUG("obj=%p", event);
} }
static void virDomainEventRTCChangeDispose(void *obj)
{
virDomainEventRTCChangePtr event = obj;
VIR_DEBUG("obj=%p", event);
}
/** /**
* virObjectEventCallbackListFree: * virObjectEventCallbackListFree:
* @list: event callback list head * @list: event callback list head
@ -861,37 +879,37 @@ virDomainEventPtr virDomainEventRebootNewFromObj(virDomainObjPtr obj)
virDomainEventPtr virDomainEventRTCChangeNewFromDom(virDomainPtr dom, virDomainEventPtr virDomainEventRTCChangeNewFromDom(virDomainPtr dom,
long long offset) long long offset)
{ {
virDomainEventPtr ev; virDomainEventRTCChangePtr ev;
if (virObjectEventInitialize() < 0) if (virObjectEventInitialize() < 0)
return NULL; return NULL;
if (!(ev = virDomainEventNew(virDomainEventClass, if (!(ev = virDomainEventNew(virDomainEventRTCChangeClass,
VIR_DOMAIN_EVENT_ID_RTC_CHANGE, VIR_DOMAIN_EVENT_ID_RTC_CHANGE,
dom->id, dom->name, dom->uuid))) dom->id, dom->name, dom->uuid)))
return NULL; return NULL;
ev->data.rtcChange.offset = offset; ev->offset = offset;
return ev; return (virDomainEventPtr)ev;
} }
virDomainEventPtr virDomainEventRTCChangeNewFromObj(virDomainObjPtr obj, virDomainEventPtr virDomainEventRTCChangeNewFromObj(virDomainObjPtr obj,
long long offset) long long offset)
{ {
virDomainEventPtr ev; virDomainEventRTCChangePtr ev;
if (virObjectEventInitialize() < 0) if (virObjectEventInitialize() < 0)
return NULL; return NULL;
if (!(ev = virDomainEventNew(virDomainEventClass, if (!(ev = virDomainEventNew(virDomainEventRTCChangeClass,
VIR_DOMAIN_EVENT_ID_RTC_CHANGE, VIR_DOMAIN_EVENT_ID_RTC_CHANGE,
obj->def->id, obj->def->name, obj->def->id, obj->def->name,
obj->def->uuid))) obj->def->uuid)))
return NULL; return NULL;
ev->data.rtcChange.offset = offset; ev->offset = offset;
return ev; return (virDomainEventPtr)ev;
} }
virDomainEventPtr virDomainEventWatchdogNewFromDom(virDomainPtr dom, virDomainEventPtr virDomainEventWatchdogNewFromDom(virDomainPtr dom,
@ -1499,10 +1517,15 @@ virDomainEventDispatchDefaultFunc(virConnectPtr conn,
goto cleanup; goto cleanup;
case VIR_DOMAIN_EVENT_ID_RTC_CHANGE: case VIR_DOMAIN_EVENT_ID_RTC_CHANGE:
{
virDomainEventRTCChangePtr rtcChangeEvent;
rtcChangeEvent = (virDomainEventRTCChangePtr)event;
((virConnectDomainEventRTCChangeCallback)cb)(conn, dom, ((virConnectDomainEventRTCChangeCallback)cb)(conn, dom,
event->data.rtcChange.offset, rtcChangeEvent->offset,
cbopaque); cbopaque);
goto cleanup; goto cleanup;
}
case VIR_DOMAIN_EVENT_ID_WATCHDOG: case VIR_DOMAIN_EVENT_ID_WATCHDOG:
((virConnectDomainEventWatchdogCallback)cb)(conn, dom, ((virConnectDomainEventWatchdogCallback)cb)(conn, dom,