diff --git a/src/conf/domain_event.c b/src/conf/domain_event.c index 0b1bb76cb3..988339e257 100644 --- a/src/conf/domain_event.c +++ b/src/conf/domain_event.c @@ -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); } diff --git a/src/conf/domain_event.h b/src/conf/domain_event.h index 647b7e4246..ec1b3d68b8 100644 --- a/src/conf/domain_event.h +++ b/src/conf/domain_event.h @@ -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;