int deleted;
};
-struct _virDomainEvent {
+
+
+static virClassPtr virObjectEventClass;
+static virClassPtr virDomainEventClass;
+static void virObjectEventDispose(void *obj);
+static void virDomainEventDispose(void *obj);
+
+struct _virObjectEvent {
+ virObject parent;
int eventID;
+};
+
+struct _virDomainEvent {
+ virObjectEvent parent;
virObjectMeta meta;
} data;
};
+static int virObjectEventOnceInit(void)
+{
+ if (!(virObjectEventClass =
+ virClassNew(virClassForObject(),
+ "virObjectEvent",
+ sizeof(virObjectEvent),
+ virObjectEventDispose)))
+ return -1;
+ if (!(virDomainEventClass =
+ virClassNew(virObjectEventClass,
+ "virDomainEvent",
+ sizeof(virDomainEvent),
+ virDomainEventDispose)))
+ return -1;
+ return 0;
+}
+
+VIR_ONCE_GLOBAL_INIT(virObjectEvent)
+
+static int virObjectEventGetEventID(void *anyobj)
+{
+ virObjectEventPtr obj = anyobj;
+
+ if (!virObjectIsClass(obj, virObjectEventClass)) {
+ VIR_WARN("Object %p (%s) is not a virObjectEvent instance",
+ obj, obj ? virClassName(obj->parent.klass) : "(unknown)");
+ return -1;
+ }
+ return obj->eventID;
+}
+
+static void virObjectEventDispose(void *obj)
+{
+ virObjectEventPtr event = obj;
+
+ VIR_DEBUG("obj=%p", event);
+}
+
+static void virDomainEventDispose(void *obj)
+{
+ virDomainEventPtr event = obj;
+
+ VIR_DEBUG("obj=%p", event);
+
+ 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) {
+ VIR_FREE(event->data.graphics.local->node);
+ VIR_FREE(event->data.graphics.local->service);
+ VIR_FREE(event->data.graphics.local);
+ }
+ if (event->data.graphics.remote) {
+ VIR_FREE(event->data.graphics.remote->node);
+ VIR_FREE(event->data.graphics.remote->service);
+ VIR_FREE(event->data.graphics.remote);
+ }
+ VIR_FREE(event->data.graphics.authScheme);
+ if (event->data.graphics.subject) {
+ size_t i;
+ for (i = 0; i < event->data.graphics.subject->nidentity; i++) {
+ VIR_FREE(event->data.graphics.subject->identities[i].type);
+ VIR_FREE(event->data.graphics.subject->identities[i].name);
+ }
+ VIR_FREE(event->data.graphics.subject);
+ }
+ break;
+
+ case VIR_DOMAIN_EVENT_ID_BLOCK_JOB:
+ VIR_FREE(event->data.blockJob.path);
+ break;
+
+ case VIR_DOMAIN_EVENT_ID_DISK_CHANGE:
+ VIR_FREE(event->data.diskChange.oldSrcPath);
+ VIR_FREE(event->data.diskChange.newSrcPath);
+ VIR_FREE(event->data.diskChange.devAlias);
+ break;
+ case VIR_DOMAIN_EVENT_ID_TRAY_CHANGE:
+ VIR_FREE(event->data.trayChange.devAlias);
+ break;
+ case VIR_DOMAIN_EVENT_ID_DEVICE_REMOVED:
+ VIR_FREE(event->data.deviceRemoved.devAlias);
+ break;
+ }
+
+ VIR_FREE(event->meta.name);
+}
+
/**
* virObjectEventCallbackListFree:
* @list: event callback list head
}
-void virDomainEventFree(virDomainEventPtr event)
-{
- if (!event)
- return;
-
- switch (event->eventID) {
- 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) {
- VIR_FREE(event->data.graphics.local->node);
- VIR_FREE(event->data.graphics.local->service);
- VIR_FREE(event->data.graphics.local);
- }
- if (event->data.graphics.remote) {
- VIR_FREE(event->data.graphics.remote->node);
- VIR_FREE(event->data.graphics.remote->service);
- VIR_FREE(event->data.graphics.remote);
- }
- VIR_FREE(event->data.graphics.authScheme);
- if (event->data.graphics.subject) {
- size_t i;
- for (i = 0; i < event->data.graphics.subject->nidentity; i++) {
- VIR_FREE(event->data.graphics.subject->identities[i].type);
- VIR_FREE(event->data.graphics.subject->identities[i].name);
- }
- VIR_FREE(event->data.graphics.subject);
- }
- break;
-
- case VIR_DOMAIN_EVENT_ID_BLOCK_JOB:
- VIR_FREE(event->data.blockJob.path);
- break;
-
- case VIR_DOMAIN_EVENT_ID_DISK_CHANGE:
- VIR_FREE(event->data.diskChange.oldSrcPath);
- VIR_FREE(event->data.diskChange.newSrcPath);
- VIR_FREE(event->data.diskChange.devAlias);
- break;
- case VIR_DOMAIN_EVENT_ID_TRAY_CHANGE:
- VIR_FREE(event->data.trayChange.devAlias);
- break;
- case VIR_DOMAIN_EVENT_ID_DEVICE_REMOVED:
- VIR_FREE(event->data.deviceRemoved.devAlias);
- break;
- }
-
- VIR_FREE(event->meta.name);
- VIR_FREE(event);
-}
-
/**
* virObjectEventQueueClear:
* @queue: pointer to the queue
return;
for (i = 0; i < queue->count; i++) {
- virDomainEventFree(queue->events[i]);
+ virObjectUnref(queue->events[i]);
}
VIR_FREE(queue->events);
queue->count = 0;
return NULL;
}
-static virDomainEventPtr virDomainEventNewInternal(int eventID,
- int id,
- const char *name,
- const unsigned char *uuid)
+static void *virObjectEventNew(virClassPtr klass,
+ int eventID)
{
- virDomainEventPtr event;
+ virObjectEventPtr event;
- if (VIR_ALLOC(event) < 0)
+ if (virObjectEventInitialize() < 0)
+ return NULL;
+
+ if (!virClassIsDerivedFrom(klass, virObjectEventClass)) {
+ virReportInvalidArg(klass,
+ _("Class %s must derive from virObjectEvent"),
+ virClassName(klass));
+ return NULL;
+ }
+
+ if (!(event = virObjectNew(klass)))
return NULL;
event->eventID = eventID;
+
+ VIR_DEBUG("obj=%p", event);
+ return event;
+}
+
+static void *virDomainEventNewInternal(virClassPtr klass,
+ int eventID,
+ int id,
+ const char *name,
+ const unsigned char *uuid)
+{
+ virDomainEventPtr event;
+
+ if (virObjectEventInitialize() < 0)
+ return NULL;
+
+ if (!virClassIsDerivedFrom(klass, virDomainEventClass)) {
+ virReportInvalidArg(klass,
+ _("Class %s must derive from virDomainEvent"),
+ virClassName(klass));
+ return NULL;
+ }
+
+ if (!(event = virObjectEventNew(klass, eventID)))
+ return NULL;
+
if (VIR_STRDUP(event->meta.name, name) < 0) {
VIR_FREE(event);
return NULL;
const unsigned char *uuid,
int type, int detail)
{
- virDomainEventPtr event = virDomainEventNewInternal(VIR_DOMAIN_EVENT_ID_LIFECYCLE,
- id, name, uuid);
+ virDomainEventPtr event;
- if (event) {
- event->data.lifecycle.type = type;
- event->data.lifecycle.detail = detail;
- }
+ if (virObjectEventInitialize() < 0)
+ return NULL;
+
+ if (!(event = virDomainEventNewInternal(virDomainEventClass,
+ VIR_DOMAIN_EVENT_ID_LIFECYCLE,
+ id, name, uuid)))
+ return NULL;
+
+ event->data.lifecycle.type = type;
+ event->data.lifecycle.detail = detail;
return event;
}
virDomainEventPtr virDomainEventRebootNew(int id, const char *name,
const unsigned char *uuid)
{
- return virDomainEventNewInternal(VIR_DOMAIN_EVENT_ID_REBOOT,
+ if (virObjectEventInitialize() < 0)
+ return NULL;
+
+ return virDomainEventNewInternal(virDomainEventClass,
+ VIR_DOMAIN_EVENT_ID_REBOOT,
id, name, uuid);
}
virDomainEventPtr virDomainEventRebootNewFromDom(virDomainPtr dom)
{
- return virDomainEventNewInternal(VIR_DOMAIN_EVENT_ID_REBOOT,
+ if (virObjectEventInitialize() < 0)
+ return NULL;
+
+ return virDomainEventNewInternal(virDomainEventClass,
+ VIR_DOMAIN_EVENT_ID_REBOOT,
dom->id, dom->name, dom->uuid);
}
virDomainEventPtr virDomainEventRebootNewFromObj(virDomainObjPtr obj)
{
- return virDomainEventNewInternal(VIR_DOMAIN_EVENT_ID_REBOOT,
+ if (virObjectEventInitialize() < 0)
+ return NULL;
+
+ return virDomainEventNewInternal(virDomainEventClass,
+ VIR_DOMAIN_EVENT_ID_REBOOT,
obj->def->id, obj->def->name, obj->def->uuid);
}
virDomainEventPtr virDomainEventRTCChangeNewFromDom(virDomainPtr dom,
long long offset)
{
- virDomainEventPtr ev =
- virDomainEventNewInternal(VIR_DOMAIN_EVENT_ID_RTC_CHANGE,
- dom->id, dom->name, dom->uuid);
+ virDomainEventPtr ev;
+
+ if (virObjectEventInitialize() < 0)
+ return NULL;
+
+ if (!(ev = virDomainEventNewInternal(virDomainEventClass,
+ VIR_DOMAIN_EVENT_ID_RTC_CHANGE,
+ dom->id, dom->name, dom->uuid)))
+ return NULL;
- if (ev)
- ev->data.rtcChange.offset = offset;
+ ev->data.rtcChange.offset = offset;
return ev;
}
virDomainEventPtr virDomainEventRTCChangeNewFromObj(virDomainObjPtr obj,
long long offset)
{
- virDomainEventPtr ev =
- virDomainEventNewInternal(VIR_DOMAIN_EVENT_ID_RTC_CHANGE,
- obj->def->id, obj->def->name, obj->def->uuid);
+ virDomainEventPtr ev;
- if (ev)
- ev->data.rtcChange.offset = offset;
+ if (virObjectEventInitialize() < 0)
+ return NULL;
+
+ if (!(ev = virDomainEventNewInternal(virDomainEventClass,
+ VIR_DOMAIN_EVENT_ID_RTC_CHANGE,
+ obj->def->id, obj->def->name,
+ obj->def->uuid)))
+ return NULL;
+
+ ev->data.rtcChange.offset = offset;
return ev;
}
virDomainEventPtr virDomainEventWatchdogNewFromDom(virDomainPtr dom,
int action)
{
- virDomainEventPtr ev =
- virDomainEventNewInternal(VIR_DOMAIN_EVENT_ID_WATCHDOG,
- dom->id, dom->name, dom->uuid);
+ virDomainEventPtr ev;
- if (ev)
- ev->data.watchdog.action = action;
+ if (virObjectEventInitialize() < 0)
+ return NULL;
+
+ if (!(ev = virDomainEventNewInternal(virDomainEventClass,
+ VIR_DOMAIN_EVENT_ID_WATCHDOG,
+ dom->id, dom->name, dom->uuid)))
+ return NULL;
+
+ ev->data.watchdog.action = action;
return ev;
}
virDomainEventPtr virDomainEventWatchdogNewFromObj(virDomainObjPtr obj,
int action)
{
- virDomainEventPtr ev =
- virDomainEventNewInternal(VIR_DOMAIN_EVENT_ID_WATCHDOG,
- obj->def->id, obj->def->name, obj->def->uuid);
+ virDomainEventPtr ev;
+
+ if (virObjectEventInitialize() < 0)
+ return NULL;
- if (ev)
- ev->data.watchdog.action = action;
+ if (!(ev = virDomainEventNewInternal(virDomainEventClass,
+ VIR_DOMAIN_EVENT_ID_WATCHDOG,
+ obj->def->id, obj->def->name,
+ obj->def->uuid)))
+ return NULL;
+
+ ev->data.watchdog.action = action;
return ev;
}
int action,
const char *reason)
{
- virDomainEventPtr ev =
- virDomainEventNewInternal(event,
- dom->id, dom->name, dom->uuid);
-
- if (ev) {
- 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) {
- virDomainEventFree(ev);
- ev = NULL;
- }
+ virDomainEventPtr ev;
+
+ if (virObjectEventInitialize() < 0)
+ return NULL;
+
+ if (!(ev = virDomainEventNewInternal(virDomainEventClass, 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) {
+ virObjectUnref(ev);
+ ev = NULL;
}
return ev;
int action,
const char *reason)
{
- virDomainEventPtr ev =
- virDomainEventNewInternal(event,
- obj->def->id, obj->def->name, obj->def->uuid);
-
- if (ev) {
- 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) {
- virDomainEventFree(ev);
- ev = NULL;
- }
+ virDomainEventPtr ev;
+
+ if (virObjectEventInitialize() < 0)
+ return NULL;
+
+ if (!(ev = virDomainEventNewInternal(virDomainEventClass, 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) {
+ virObjectUnref(ev);
+ ev = NULL;
}
return ev;
const char *authScheme,
virDomainEventGraphicsSubjectPtr subject)
{
- virDomainEventPtr ev =
- virDomainEventNewInternal(VIR_DOMAIN_EVENT_ID_GRAPHICS,
- dom->id, dom->name, dom->uuid);
+ virDomainEventPtr ev;
- if (ev) {
- ev->data.graphics.phase = phase;
- if (VIR_STRDUP(ev->data.graphics.authScheme, authScheme) < 0) {
- virDomainEventFree(ev);
- return NULL;
- }
- ev->data.graphics.local = local;
- ev->data.graphics.remote = remote;
- ev->data.graphics.subject = subject;
+ if (virObjectEventInitialize() < 0)
+ return NULL;
+
+ if (!(ev = virDomainEventNewInternal(virDomainEventClass,
+ VIR_DOMAIN_EVENT_ID_GRAPHICS,
+ dom->id, dom->name, dom->uuid)))
+ return NULL;
+
+ ev->data.graphics.phase = phase;
+ if (VIR_STRDUP(ev->data.graphics.authScheme, authScheme) < 0) {
+ virObjectUnref(ev);
+ return NULL;
}
+ ev->data.graphics.local = local;
+ ev->data.graphics.remote = remote;
+ ev->data.graphics.subject = subject;
return ev;
}
const char *authScheme,
virDomainEventGraphicsSubjectPtr subject)
{
- virDomainEventPtr ev =
- virDomainEventNewInternal(VIR_DOMAIN_EVENT_ID_GRAPHICS,
- obj->def->id, obj->def->name, obj->def->uuid);
+ virDomainEventPtr ev;
- if (ev) {
- ev->data.graphics.phase = phase;
- if (VIR_STRDUP(ev->data.graphics.authScheme, authScheme) < 0) {
- virDomainEventFree(ev);
- return NULL;
- }
- ev->data.graphics.local = local;
- ev->data.graphics.remote = remote;
- ev->data.graphics.subject = subject;
+ if (virObjectEventInitialize() < 0)
+ return NULL;
+
+ if (!(ev = virDomainEventNewInternal(virDomainEventClass,
+ VIR_DOMAIN_EVENT_ID_GRAPHICS,
+ obj->def->id, obj->def->name,
+ obj->def->uuid)))
+ return NULL;
+
+ ev->data.graphics.phase = phase;
+ if (VIR_STRDUP(ev->data.graphics.authScheme, authScheme) < 0) {
+ virObjectUnref(ev);
+ return NULL;
}
+ ev->data.graphics.local = local;
+ ev->data.graphics.remote = remote;
+ ev->data.graphics.subject = subject;
return ev;
}
virDomainEventBlockJobNew(int id, const char *name, unsigned char *uuid,
const char *path, int type, int status)
{
- virDomainEventPtr ev =
- virDomainEventNewInternal(VIR_DOMAIN_EVENT_ID_BLOCK_JOB,
- id, name, uuid);
+ virDomainEventPtr ev;
- if (ev) {
- if (VIR_STRDUP(ev->data.blockJob.path, path) < 0) {
- virDomainEventFree(ev);
- return NULL;
- }
- ev->data.blockJob.type = type;
- ev->data.blockJob.status = status;
+ if (virObjectEventInitialize() < 0)
+ return NULL;
+
+ if (!(ev = virDomainEventNewInternal(virDomainEventClass,
+ VIR_DOMAIN_EVENT_ID_BLOCK_JOB,
+ id, name, uuid)))
+ return NULL;
+
+ if (VIR_STRDUP(ev->data.blockJob.path, path) < 0) {
+ virObjectUnref(ev);
+ return NULL;
}
+ ev->data.blockJob.type = type;
+ ev->data.blockJob.status = status;
return ev;
}
virDomainEventPtr virDomainEventControlErrorNewFromDom(virDomainPtr dom)
{
- virDomainEventPtr ev =
- virDomainEventNewInternal(VIR_DOMAIN_EVENT_ID_CONTROL_ERROR,
- dom->id, dom->name, dom->uuid);
+ virDomainEventPtr ev;
+
+ if (virObjectEventInitialize() < 0)
+ return NULL;
+
+ if (!(ev = virDomainEventNewInternal(virDomainEventClass,
+ VIR_DOMAIN_EVENT_ID_CONTROL_ERROR,
+ dom->id, dom->name, dom->uuid)))
+ return NULL;
return ev;
}
virDomainEventPtr virDomainEventControlErrorNewFromObj(virDomainObjPtr obj)
{
- virDomainEventPtr ev =
- virDomainEventNewInternal(VIR_DOMAIN_EVENT_ID_CONTROL_ERROR,
- obj->def->id, obj->def->name, obj->def->uuid);
+ virDomainEventPtr ev;
+
+ if (virObjectEventInitialize() < 0)
+ return NULL;
+
+ if (!(ev = virDomainEventNewInternal(virDomainEventClass,
+ VIR_DOMAIN_EVENT_ID_CONTROL_ERROR,
+ obj->def->id, obj->def->name,
+ obj->def->uuid)))
+ return NULL;
return ev;
}
const char *newSrcPath,
const char *devAlias, int reason)
{
- virDomainEventPtr ev =
- virDomainEventNewInternal(VIR_DOMAIN_EVENT_ID_DISK_CHANGE,
- id, name, uuid);
+ virDomainEventPtr ev;
- if (ev) {
- if (VIR_STRDUP(ev->data.diskChange.devAlias, devAlias) < 0)
- goto error;
+ if (virObjectEventInitialize() < 0)
+ return NULL;
- if (VIR_STRDUP(ev->data.diskChange.oldSrcPath, oldSrcPath) < 0)
- goto error;
+ if (!(ev = virDomainEventNewInternal(virDomainEventClass,
+ VIR_DOMAIN_EVENT_ID_DISK_CHANGE,
+ id, name, uuid)))
+ return NULL;
- if (VIR_STRDUP(ev->data.diskChange.newSrcPath, newSrcPath) < 0)
- goto error;
+ if (VIR_STRDUP(ev->data.diskChange.devAlias, devAlias) < 0)
+ goto error;
- ev->data.diskChange.reason = reason;
- }
+ if (VIR_STRDUP(ev->data.diskChange.oldSrcPath, oldSrcPath) < 0)
+ goto error;
+
+ if (VIR_STRDUP(ev->data.diskChange.newSrcPath, newSrcPath) < 0)
+ goto error;
+
+ ev->data.diskChange.reason = reason;
return ev;
error:
- virDomainEventFree(ev);
+ virObjectUnref(ev);
return NULL;
}
const char *devAlias,
int reason)
{
- virDomainEventPtr ev =
- virDomainEventNewInternal(VIR_DOMAIN_EVENT_ID_TRAY_CHANGE,
- id, name, uuid);
+ virDomainEventPtr ev;
- if (ev) {
- if (VIR_STRDUP(ev->data.trayChange.devAlias, devAlias) < 0)
- goto error;
+ if (virObjectEventInitialize() < 0)
+ return NULL;
- ev->data.trayChange.reason = reason;
- }
+ if (!(ev = virDomainEventNewInternal(virDomainEventClass,
+ VIR_DOMAIN_EVENT_ID_TRAY_CHANGE,
+ id, name, uuid)))
+ return NULL;
+
+ if (VIR_STRDUP(ev->data.trayChange.devAlias, devAlias) < 0)
+ goto error;
+
+ ev->data.trayChange.reason = reason;
return ev;
error:
- virDomainEventFree(ev);
+ virObjectUnref(ev);
return NULL;
}
virDomainEventPMWakeupNew(int id, const char *name,
unsigned char *uuid)
{
- virDomainEventPtr ev =
- virDomainEventNewInternal(VIR_DOMAIN_EVENT_ID_PMWAKEUP,
- id, name, uuid);
+ virDomainEventPtr ev;
+
+ if (virObjectEventInitialize() < 0)
+ return NULL;
+
+ if (!(ev = virDomainEventNewInternal(virDomainEventClass,
+ VIR_DOMAIN_EVENT_ID_PMWAKEUP,
+ id, name, uuid)))
+ return NULL;
return ev;
}
virDomainEventPMSuspendNew(int id, const char *name,
unsigned char *uuid)
{
- virDomainEventPtr ev =
- virDomainEventNewInternal(VIR_DOMAIN_EVENT_ID_PMSUSPEND,
- id, name, uuid);
+ virDomainEventPtr ev;
+
+ if (virObjectEventInitialize() < 0)
+ return NULL;
+
+ if (!(ev = virDomainEventNewInternal(virDomainEventClass,
+ VIR_DOMAIN_EVENT_ID_PMSUSPEND,
+ id, name, uuid)))
+ return NULL;
return ev;
}
virDomainEventPMSuspendDiskNew(int id, const char *name,
unsigned char *uuid)
{
- virDomainEventPtr ev =
- virDomainEventNewInternal(VIR_DOMAIN_EVENT_ID_PMSUSPEND_DISK,
- id, name, uuid);
+ virDomainEventPtr ev;
+
+ if (virObjectEventInitialize() < 0)
+ return NULL;
+
+ if (!(ev = virDomainEventNewInternal(virDomainEventClass,
+ VIR_DOMAIN_EVENT_ID_PMSUSPEND_DISK,
+ id, name, uuid)))
+ return NULL;
return ev;
}
virDomainEventPtr virDomainEventBalloonChangeNewFromDom(virDomainPtr dom,
unsigned long long actual)
{
- virDomainEventPtr ev =
- virDomainEventNewInternal(VIR_DOMAIN_EVENT_ID_BALLOON_CHANGE,
- dom->id, dom->name, dom->uuid);
+ virDomainEventPtr ev;
+
+ if (virObjectEventInitialize() < 0)
+ return NULL;
+
+ if (!(ev = virDomainEventNewInternal(virDomainEventClass,
+ VIR_DOMAIN_EVENT_ID_BALLOON_CHANGE,
+ dom->id, dom->name, dom->uuid)))
+ return NULL;
- if (ev)
- ev->data.balloonChange.actual = actual;
+ ev->data.balloonChange.actual = actual;
return ev;
}
virDomainEventPtr virDomainEventBalloonChangeNewFromObj(virDomainObjPtr obj,
unsigned long long actual)
{
- virDomainEventPtr ev =
- virDomainEventNewInternal(VIR_DOMAIN_EVENT_ID_BALLOON_CHANGE,
- obj->def->id, obj->def->name, obj->def->uuid);
+ virDomainEventPtr ev;
+
+ if (virObjectEventInitialize() < 0)
+ return NULL;
+
+ if (!(ev = virDomainEventNewInternal(virDomainEventClass,
+ VIR_DOMAIN_EVENT_ID_BALLOON_CHANGE,
+ obj->def->id, obj->def->name, obj->def->uuid)))
+ return NULL;
- if (ev)
- ev->data.balloonChange.actual = actual;
+ ev->data.balloonChange.actual = actual;
return ev;
}
unsigned char *uuid,
const char *devAlias)
{
- virDomainEventPtr ev =
- virDomainEventNewInternal(VIR_DOMAIN_EVENT_ID_DEVICE_REMOVED,
- id, name, uuid);
+ virDomainEventPtr ev;
- if (ev) {
- if (VIR_STRDUP(ev->data.deviceRemoved.devAlias, devAlias) < 0)
- goto error;
- }
+ if (virObjectEventInitialize() < 0)
+ return NULL;
+
+ if (!(ev = virDomainEventNewInternal(virDomainEventClass,
+ VIR_DOMAIN_EVENT_ID_DEVICE_REMOVED,
+ id, name, uuid)))
+ return NULL;
+
+ if (VIR_STRDUP(ev->data.deviceRemoved.devAlias, devAlias) < 0)
+ goto error;
return ev;
error:
- virDomainEventFree(ev);
+ virObjectUnref(ev);
return NULL;
}
void *opaque ATTRIBUTE_UNUSED)
{
virDomainPtr dom = virGetDomain(conn, event->meta.name, event->meta.uuid);
+ int eventID = virObjectEventGetEventID(event);
if (!dom)
return;
dom->id = event->meta.id;
- switch ((virDomainEventID) event->eventID) {
+ switch ((virDomainEventID) eventID) {
case VIR_DOMAIN_EVENT_ID_LIFECYCLE:
((virConnectDomainEventCallback)cb)(conn, dom,
event->data.lifecycle.type,
break;
}
- VIR_WARN("Unexpected event ID %d", event->eventID);
+ VIR_WARN("Unexpected event ID %d", eventID);
cleanup:
virDomainFree(dom);
return 0;
if (cb->deleted)
return 0;
- if (cb->eventID != event->eventID)
+ if (cb->eventID != virObjectEventGetEventID(event))
return 0;
if (cb->meta) {
for (i = 0; i < queue->count; i++) {
virDomainEventDispatch(queue->events[i], callbacks, dispatch, opaque);
- virDomainEventFree(queue->events[i]);
+ virObjectUnref(queue->events[i]);
}
VIR_FREE(queue->events);
queue->count = 0;
virDomainEventPtr event)
{
if (state->timer < 0) {
- virDomainEventFree(event);
+ virObjectUnref(event);
return;
}
if (virObjectEventQueuePush(state->queue, event) < 0) {
VIR_DEBUG("Error adding event to queue");
- virDomainEventFree(event);
+ virObjectUnref(event);
}
if (state->queue->count == 1)