From: Nikolay Shirokovskiy <nshirokovskiy@xxxxxxxxxxxxx> Current version of SDK event dispatcing is incorrect. For most VM events (add, delete etc) issuer type is PIE_DISPATCHER. Actually analyzing issuer type doesn't have any benifints so this patch get rid of it. All dispatching is done only on event type. Signed-off-by: Nikolay Shirokovskiy <nshirokovskiy@xxxxxxxxxxxxx> --- src/vz/vz_sdk.c | 58 +++++++++++++++--------------------------------------- 1 files changed, 16 insertions(+), 42 deletions(-) diff --git a/src/vz/vz_sdk.c b/src/vz/vz_sdk.c index 98f7a57..2ca74c4 100644 --- a/src/vz/vz_sdk.c +++ b/src/vz/vz_sdk.c @@ -1697,21 +1697,33 @@ prlsdkHandlePerfEvent(vzConnPtr privconn, return PRL_ERR_SUCCESS; } -static void -prlsdkHandleVmEvent(vzConnPtr privconn, PRL_HANDLE prlEvent) +static PRL_RESULT +prlsdkEventsHandler(PRL_HANDLE prlEvent, PRL_VOID_PTR opaque) { + vzConnPtr privconn = opaque; PRL_RESULT pret = PRL_ERR_FAILURE; + PRL_HANDLE_TYPE handleType; char uuidstr[VIR_UUID_STRING_BUFLEN + 2]; unsigned char uuid[VIR_UUID_BUFLEN]; PRL_UINT32 bufsize = ARRAY_CARDINALITY(uuidstr); PRL_EVENT_TYPE prlEventType; - pret = PrlEvent_GetType(prlEvent, &prlEventType); + pret = PrlHandle_GetType(prlEvent, &handleType); prlsdkCheckRetGoto(pret, cleanup); + /* Currently, there is no need to handle anything but events */ + if (handleType != PHT_EVENT) + goto cleanup; + + if (privconn == NULL) + goto cleanup; + pret = PrlEvent_GetIssuerId(prlEvent, uuidstr, &bufsize); prlsdkCheckRetGoto(pret, cleanup); + pret = PrlEvent_GetType(prlEvent, &prlEventType); + prlsdkCheckRetGoto(pret, cleanup); + if (prlsdkUUIDParse(uuidstr, uuid) < 0) goto cleanup; @@ -1736,44 +1748,7 @@ prlsdkHandleVmEvent(vzConnPtr privconn, PRL_HANDLE prlEvent) prlEvent = PRL_INVALID_HANDLE; break; default: - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Can't handle event of type %d"), prlEventType); - } - - cleanup: - PrlHandle_Free(prlEvent); - return; -} - -static PRL_RESULT -prlsdkEventsHandler(PRL_HANDLE prlEvent, PRL_VOID_PTR opaque) -{ - vzConnPtr privconn = opaque; - PRL_RESULT pret = PRL_ERR_FAILURE; - PRL_HANDLE_TYPE handleType; - PRL_EVENT_ISSUER_TYPE prlIssuerType = PIE_UNKNOWN; - - pret = PrlHandle_GetType(prlEvent, &handleType); - prlsdkCheckRetGoto(pret, cleanup); - - /* Currently, there is no need to handle anything but events */ - if (handleType != PHT_EVENT) - goto cleanup; - - if (privconn == NULL) - goto cleanup; - - PrlEvent_GetIssuerType(prlEvent, &prlIssuerType); - prlsdkCheckRetGoto(pret, cleanup); - - switch (prlIssuerType) { - case PIE_VIRTUAL_MACHINE: - prlsdkHandleVmEvent(privconn, prlEvent); - // above function takes own of event - prlEvent = PRL_INVALID_HANDLE; - break; - default: - VIR_DEBUG("Skipping event of issuer type %d", prlIssuerType); + VIR_DEBUG("Skipping event of type %d", prlEventType); } cleanup: @@ -1781,7 +1756,6 @@ prlsdkEventsHandler(PRL_HANDLE prlEvent, PRL_VOID_PTR opaque) return PRL_ERR_SUCCESS; } - int prlsdkSubscribeToPCSEvents(vzConnPtr privconn) { PRL_RESULT pret = PRL_ERR_UNINITIALIZED; -- 1.7.1 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list