While working on events, I found a number of minor issues; I'm hoisting these to the front rather than doing it piecemeal in the patches where I first noticed bad or missing documentation. * src/conf/object_event.c: Fix grammar, document all parameters of public functions; wrap some long lines. * src/conf/object_event.h: Likewise. * src/conf/network_event.c: Likewise. * src/conf/domain_event.c: Likewise (except for the large number of event creation functions). Signed-off-by: Eric Blake <eblake@xxxxxxxxxx> --- src/conf/domain_event.c | 64 +++++++++++++++++++++++++-------------- src/conf/network_event.c | 26 +++++++++++----- src/conf/object_event.c | 78 +++++++++++++++++++++++++++++++++++++++++++----- src/conf/object_event.h | 7 +++-- 4 files changed, 134 insertions(+), 41 deletions(-) diff --git a/src/conf/domain_event.c b/src/conf/domain_event.c index e5f5796..8800568 100644 --- a/src/conf/domain_event.c +++ b/src/conf/domain_event.c @@ -1,7 +1,7 @@ /* * domain_event.c: domain event queue processing helpers * - * Copyright (C) 2010-2013 Red Hat, Inc. + * Copyright (C) 2010-2014 Red Hat, Inc. * Copyright (C) 2008 VirtualIron * Copyright (C) 2013 SUSE LINUX Products GmbH, Nuernberg, Germany. * @@ -70,7 +70,7 @@ virDomainEventDispatchDefaultFunc(virConnectPtr conn, struct _virDomainEvent { virObjectEvent parent; - /* Unused attribute to get virDomainEvent class being created */ + /* Unused attribute to allow for subclass creation */ bool dummy; }; typedef struct _virDomainEvent virDomainEvent; @@ -172,7 +172,8 @@ typedef struct _virDomainEventDeviceRemoved virDomainEventDeviceRemoved; typedef virDomainEventDeviceRemoved *virDomainEventDeviceRemovedPtr; -static int virDomainEventsOnceInit(void) +static int +virDomainEventsOnceInit(void) { if (!(virDomainEventClass = virClassNew(virClassForObjectEvent(), @@ -246,32 +247,37 @@ static int virDomainEventsOnceInit(void) VIR_ONCE_GLOBAL_INIT(virDomainEvents) -static void virDomainEventDispose(void *obj) +static void +virDomainEventDispose(void *obj) { virDomainEventPtr event = obj; VIR_DEBUG("obj=%p", event); } -static void virDomainEventLifecycleDispose(void *obj) +static void +virDomainEventLifecycleDispose(void *obj) { virDomainEventLifecyclePtr event = obj; VIR_DEBUG("obj=%p", event); } -static void virDomainEventRTCChangeDispose(void *obj) +static void +virDomainEventRTCChangeDispose(void *obj) { virDomainEventRTCChangePtr event = obj; VIR_DEBUG("obj=%p", event); } -static void virDomainEventWatchdogDispose(void *obj) +static void +virDomainEventWatchdogDispose(void *obj) { virDomainEventWatchdogPtr event = obj; VIR_DEBUG("obj=%p", event); } -static void virDomainEventIOErrorDispose(void *obj) +static void +virDomainEventIOErrorDispose(void *obj) { virDomainEventIOErrorPtr event = obj; VIR_DEBUG("obj=%p", event); @@ -281,7 +287,8 @@ static void virDomainEventIOErrorDispose(void *obj) VIR_FREE(event->reason); } -static void virDomainEventGraphicsDispose(void *obj) +static void +virDomainEventGraphicsDispose(void *obj) { virDomainEventGraphicsPtr event = obj; VIR_DEBUG("obj=%p", event); @@ -307,7 +314,8 @@ static void virDomainEventGraphicsDispose(void *obj) } } -static void virDomainEventBlockJobDispose(void *obj) +static void +virDomainEventBlockJobDispose(void *obj) { virDomainEventBlockJobPtr event = obj; VIR_DEBUG("obj=%p", event); @@ -315,7 +323,8 @@ static void virDomainEventBlockJobDispose(void *obj) VIR_FREE(event->path); } -static void virDomainEventDiskChangeDispose(void *obj) +static void +virDomainEventDiskChangeDispose(void *obj) { virDomainEventDiskChangePtr event = obj; VIR_DEBUG("obj=%p", event); @@ -325,7 +334,8 @@ static void virDomainEventDiskChangeDispose(void *obj) VIR_FREE(event->devAlias); } -static void virDomainEventTrayChangeDispose(void *obj) +static void +virDomainEventTrayChangeDispose(void *obj) { virDomainEventTrayChangePtr event = obj; VIR_DEBUG("obj=%p", event); @@ -333,13 +343,15 @@ static void virDomainEventTrayChangeDispose(void *obj) VIR_FREE(event->devAlias); } -static void virDomainEventBalloonChangeDispose(void *obj) +static void +virDomainEventBalloonChangeDispose(void *obj) { virDomainEventBalloonChangePtr event = obj; VIR_DEBUG("obj=%p", event); } -static void virDomainEventDeviceRemovedDispose(void *obj) +static void +virDomainEventDeviceRemovedDispose(void *obj) { virDomainEventDeviceRemovedPtr event = obj; VIR_DEBUG("obj=%p", event); @@ -354,7 +366,9 @@ static void virDomainEventDeviceRemovedDispose(void *obj) * @cbList: the list * @callback: the callback to remove * - * Internal function to remove a callback from a virObjectEventCallbackListPtr + * Internal function to remove a callback from a virObjectEventCallbackListPtr, + * when registered via the older virConnectDomainEventRegister with no + * callbackID */ static int virDomainEventCallbackListRemove(virConnectPtr conn, @@ -430,9 +444,11 @@ virDomainEventCallbackListMarkDelete(virConnectPtr conn, * @conn: pointer to the connection * @cbList: the list * @callback: the callback to add - * @opaque: opaque data tio pass to callback + * @opaque: opaque data to pass to @callback + * @freecb: callback to free @opaque * - * Internal function to add a callback from a virObjectEventCallbackListPtr + * Internal function to add a callback from a virObjectEventCallbackListPtr, + * when registered via the older virConnectDomainEventRegister. */ static int virDomainEventCallbackListAdd(virConnectPtr conn, @@ -1355,8 +1371,8 @@ cleanup: * virDomainEventStateRegister: * @conn: connection to associate with callback * @state: object event state - * @callback: function to remove from event - * @opaque: data blob to pass to callback + * @callback: the callback to add + * @opaque: data blob to pass to @callback * @freecb: callback to free @opaque * * Register the function @callback with connection @conn, @@ -1409,14 +1425,16 @@ cleanup: * virDomainEventStateRegisterID: * @conn: connection to associate with callback * @state: object event state + * @dom: optional domain for filtering the event * @eventID: ID of the event type to register for - * @cb: function to remove from event - * @opaque: data blob to pass to callback + * @cb: function to invoke when event fires + * @opaque: data blob to pass to @callback * @freecb: callback to free @opaque * @callbackID: filled with callback ID * - * Register the function @callbackID with connection @conn, - * from @state, for events of type @eventID. + * Register the function @cb with connection @conn, from @state, for + * events of type @eventID, and return the registration handle in + * @callbackID. * * Returns: the number of callbacks now registered, or -1 on error */ diff --git a/src/conf/network_event.c b/src/conf/network_event.c index 3819702..a192ffe 100644 --- a/src/conf/network_event.c +++ b/src/conf/network_event.c @@ -1,6 +1,7 @@ /* * network_event.c: network event queue processing helpers * + * Copyright (C) 2014 Red Hat, Inc. * Copyright (C) 2013 SUSE LINUX Products GmbH, Nuernberg, Germany. * * This library is free software; you can redistribute it and/or @@ -31,7 +32,7 @@ struct _virNetworkEvent { virObjectEvent parent; - /* Unused attribute to get virNetworkEvent class being created */ + /* Unused attribute to allow for subclass creation */ bool dummy; }; typedef struct _virNetworkEvent virNetworkEvent; @@ -71,7 +72,7 @@ virNetworkEventsOnceInit(void) VIR_ONCE_GLOBAL_INIT(virNetworkEvents) -void +static void virNetworkEventDispose(void *obj) { virNetworkEventPtr event = obj; @@ -79,7 +80,7 @@ virNetworkEventDispose(void *obj) } -void +static void virNetworkEventLifecycleDispose(void *obj) { virNetworkEventLifecyclePtr event = obj; @@ -126,13 +127,14 @@ cleanup: * @state: object event state * @net: network to filter on or NULL for all networks * @eventID: ID of the event type to register for - * @cb: function to add to event - * @opaque: data blob to pass to callback + * @cb: function to invoke when event occurs + * @opaque: data blob to pass to @callback * @freecb: callback to free @opaque * @callbackID: filled with callback ID * - * Register the function @callbackID with connection @conn, - * from @state, for events of type @eventID. + * Register the function @cb with connection @conn, from @state, for + * events of type @eventID, and return the registration handle in + * @callbackID. * * Returns: the number of callbacks now registered, or -1 on error */ @@ -161,6 +163,16 @@ virNetworkEventStateRegisterID(virConnectPtr conn, cb, opaque, freecb, callbackID); } + +/** + * virNetworkEventLifecycleNew: + * @name: name of the network object the event describes + * @uuid: uuid of the network object the event describes + * @type: type of lifecycle event + * @detail: more details about @type + * + * Create a new network lifecycle event. + */ virObjectEventPtr virNetworkEventLifecycleNew(const char *name, const unsigned char *uuid, diff --git a/src/conf/object_event.c b/src/conf/object_event.c index c86974b..eca6a10 100644 --- a/src/conf/object_event.c +++ b/src/conf/object_event.c @@ -1,7 +1,7 @@ /* * object_event.c: object event queue processing helpers * - * Copyright (C) 2010-2013 Red Hat, Inc. + * Copyright (C) 2010-2014 Red Hat, Inc. * Copyright (C) 2008 VirtualIron * Copyright (C) 2013 SUSE LINUX Products GmbH, Nuernberg, Germany. * @@ -43,7 +43,6 @@ struct _virObjectEventQueue { static virClassPtr virObjectEventClass; -static virClassPtr virObjectEventClass; static void virObjectEventDispose(void *obj); static int @@ -60,6 +59,12 @@ virObjectEventOnceInit(void) VIR_ONCE_GLOBAL_INIT(virObjectEvent) +/** + * virClassForObjectEvent: + * + * Return the class object to be used as a parent when creating an + * event subclass. + */ virClassPtr virClassForObjectEvent(void) { @@ -233,7 +238,8 @@ virObjectEventCallbackListPurgeMarked(virObjectEventCallbackListPtr cbList) * @klass: the base event class * @eventID: the event ID * @callback: the callback to add - * @opaque: opaque data tio pass to callback + * @opaque: opaque data to pass to @callback + * @freecb: callback to free @opaque * @callbackID: filled with callback ID * * Internal function to add a callback from a virObjectEventCallbackListPtr @@ -399,18 +405,33 @@ virObjectEventQueueNew(void) return ret; } + +/** + * virObjectEventStateLock: + * @state: the event state object + * + * Lock event state before calling functions from object_event_private.h. + */ void virObjectEventStateLock(virObjectEventStatePtr state) { virMutexLock(&state->lock); } + +/** + * virObjectEventStateUnlock: + * @state: the event state object + * + * Unlock event state after calling functions from object_event_private.h. + */ void virObjectEventStateUnlock(virObjectEventStatePtr state) { virMutexUnlock(&state->lock); } + /** * virObjectEventStateFree: * @list: virObjectEventStatePtr to free @@ -436,6 +457,16 @@ virObjectEventStateFree(virObjectEventStatePtr state) static void virObjectEventStateFlush(virObjectEventStatePtr state); + +/** + * virObjectEventTimer: + * @timer: id of the event loop timer + * @opaque: the event state object + * + * Register this function with the event state as its opaque data as + * the callback of a periodic timer on the event loop, in order to + * flush the callback queue. + */ void virObjectEventTimer(int timer ATTRIBUTE_UNUSED, void *opaque) { @@ -444,8 +475,11 @@ virObjectEventTimer(int timer ATTRIBUTE_UNUSED, void *opaque) virObjectEventStateFlush(state); } + /** * virObjectEventStateNew: + * + * Allocate a new event state object. */ virObjectEventStatePtr virObjectEventStateNew(void) @@ -477,6 +511,18 @@ error: return NULL; } + +/** + * virObjectEventNew: + * @klass: subclass of event to be created + * @dispatcher: callback for dispatching the particular subclass of event + * @eventID: id of the event + * @id: id of the object the event describes, or 0 + * @name: name of the object the event describes + * @uuid: uuid of the object the event describes + * + * Create a new event, with the information common to all events. + */ void * virObjectEventNew(virClassPtr klass, virObjectEventDispatchFunc dispatcher, @@ -514,6 +560,7 @@ virObjectEventNew(virClassPtr klass, return event; } + /** * virObjectEventQueuePush: * @evtQueue: the object event queue @@ -613,6 +660,16 @@ virObjectEventStateQueueDispatch(virObjectEventStatePtr state, queue->count = 0; } + +/** + * virObjectEventStateQueue: + * @state: the event state object + * @event: event to add to the queue + * + * Adds @event to the queue of events to be dispatched at the next + * safe moment. The caller should no longer use @event after this + * call. + */ void virObjectEventStateQueue(virObjectEventStatePtr state, virObjectEventPtr event) @@ -667,15 +724,19 @@ virObjectEventStateFlush(virObjectEventStatePtr state) * virObjectEventStateRegisterID: * @conn: connection to associate with callback * @state: domain event state + * @uuid: uuid of the object for event filtering + * @name: name of the object for event filtering + * @id: id of the object for event filtering, or 0 * @klass: the base event class * @eventID: ID of the event type to register for - * @cb: function to remove from event - * @opaque: data blob to pass to callback + * @cb: function to invoke when event occurs + * @opaque: data blob to pass to @callback * @freecb: callback to free @opaque * @callbackID: filled with callback ID * - * Register the function @callbackID with connection @conn, - * from @state, for events of type @eventID. + * Register the function @cb with connection @conn, from @state, for + * events of type @eventID, and return the registration handle in + * @callbackID. * * Returns: the number of callbacks now registered, or -1 on error */ @@ -746,7 +807,8 @@ virObjectEventStateDeregisterID(virConnectPtr conn, virObjectEventStateLock(state); if (state->isDispatching) ret = virObjectEventCallbackListMarkDeleteID(conn, - state->callbacks, callbackID); + state->callbacks, + callbackID); else ret = virObjectEventCallbackListRemoveID(conn, state->callbacks, callbackID); diff --git a/src/conf/object_event.h b/src/conf/object_event.h index 23ecb34..fa1281c 100644 --- a/src/conf/object_event.h +++ b/src/conf/object_event.h @@ -1,7 +1,7 @@ /* * object_event.h: object event queue processing helpers * - * Copyright (C) 2012 Red Hat, Inc. + * Copyright (C) 2012-2014 Red Hat, Inc. * Copyright (C) 2008 VirtualIron * Copyright (C) 2013 SUSE LINUX Products GmbH, Nuernberg, Germany. * @@ -47,7 +47,7 @@ void virObjectEventStateFree(virObjectEventStatePtr state); virObjectEventStatePtr virObjectEventStateNew(void); -/* +/** * virConnectObjectEventGenericCallback: * @conn: the connection pointer * @obj: the object pointer @@ -60,7 +60,8 @@ typedef void (*virConnectObjectEventGenericCallback)(virConnectPtr conn, void *obj, void *opaque); -# define VIR_OBJECT_EVENT_CALLBACK(cb) ((virConnectObjectEventGenericCallback)(cb)) +# define VIR_OBJECT_EVENT_CALLBACK(cb) \ + ((virConnectObjectEventGenericCallback)(cb)) void virObjectEventStateQueue(virObjectEventStatePtr state, -- 1.8.4.2 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list