Add object event namespaces for the event IDs

Each unique event ID will thus be composed by 1 byte for the namespace
and 1 byte for a namespace-specific ID. The namespace for domain event
needs to be 0 for compatibility reasons.
This commit is contained in:
Cédric Bosdonnat 2013-11-22 15:55:12 +01:00 committed by Daniel P. Berrange
parent 67d91cb2bd
commit abb65994b7
2 changed files with 16 additions and 2 deletions

View File

@ -1912,11 +1912,17 @@ virObjectEventStateDispatchFunc(virConnectPtr conn,
void *opaque)
{
virObjectEventStatePtr state = opaque;
virEventNamespaceID namespace = (event->eventID & 0xFF00) >> 8;
/* Drop the lock whle dispatching, for sake of re-entrancy */
virObjectEventStateUnlock(state);
virDomainEventDispatchDefaultFunc(conn, event,
VIR_DOMAIN_EVENT_CALLBACK(cb), cbopaque, NULL);
switch (namespace)
{
case VIR_EVENT_NAMESPACE_DOMAIN:
virDomainEventDispatchDefaultFunc(conn, event,
VIR_DOMAIN_EVENT_CALLBACK(cb), cbopaque, NULL);
break;
}
virObjectEventStateLock(state);
}

View File

@ -28,6 +28,14 @@
# include "domain_conf.h"
/** Event IDs are computed in the following way:
virEventNamespaceID << 8 + vir*EventId
*/
typedef enum {
VIR_EVENT_NAMESPACE_DOMAIN = 0, /* 0 to keep value of virDomainEventId unchanged */
} virEventNamespaceID;
typedef struct _virObjectEventCallback virObjectEventCallback;
typedef virObjectEventCallback *virObjectEventCallbackPtr;