[libvirt] [PATCH 07/12] vbox: remove domain events support.

Dawid Zamirski dzamirski at datto.com
Thu Dec 29 20:34:28 UTC 2016


this was implemented only for vbox 3 series and was mostly stubs
anyway.
---
 src/vbox/vbox_common.c        |  20 --
 src/vbox/vbox_tmpl.c          | 648 ------------------------------------------
 src/vbox/vbox_uniformed_api.h |  22 +-
 3 files changed, 2 insertions(+), 688 deletions(-)

diff --git a/src/vbox/vbox_common.c b/src/vbox/vbox_common.c
index f2ac7f9..c1c7997 100644
--- a/src/vbox/vbox_common.c
+++ b/src/vbox/vbox_common.c
@@ -111,8 +111,6 @@ vboxDriverDispose(void *obj)
 
     virObjectUnref(driver->caps);
     virObjectUnref(driver->xmlopt);
-    if (gVBoxAPI.domainEventCallbacks)
-        virObjectUnref(driver->domainEventState);
 }
 
 static int
@@ -145,10 +143,6 @@ vboxDriverObjNew(void)
                                                  NULL, NULL)))
         goto cleanup;
 
-    if (gVBoxAPI.domainEventCallbacks &&
-        !(driver->domainEventState = virObjectEventStateNew()))
-        goto cleanup;
-
     return driver;
 
  cleanup:
@@ -199,10 +193,6 @@ vboxSdkInitialize(void)
     if (gVBoxAPI.UPFN.Initialize(vbox_driver) != 0)
         return -1;
 
-    if (gVBoxAPI.domainEventCallbacks &&
-        gVBoxAPI.initializeDomainEvent(vbox_driver) != 0)
-        return -1;
-
     if (vbox_driver->vboxObj == NULL) {
         virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
                        _("IVirtualBox object is null"));
@@ -7816,14 +7806,6 @@ virHypervisorDriver vboxCommonDriver = {
     .domainScreenshot = vboxDomainScreenshot, /* 0.9.2 */
 };
 
-static void updateDriver(void)
-{
-    /* Update the vboxDriver according to the vboxUniformedAPI.
-     * We need to make sure the vboxUniformedAPI is initialized
-     * before calling this function. */
-    gVBoxAPI.registerDomainEvent(&vboxCommonDriver);
-}
-
 virHypervisorDriverPtr vboxGetHypervisorDriver(uint32_t uVersion)
 {
     /* Install gVBoxAPI according to the vbox API version. */
@@ -7835,7 +7817,5 @@ virHypervisorDriverPtr vboxGetHypervisorDriver(uint32_t uVersion)
         return NULL;
     }
 
-    updateDriver();
-
     return &vboxCommonDriver;
 }
diff --git a/src/vbox/vbox_tmpl.c b/src/vbox/vbox_tmpl.c
index 0eacfe3..fecd54f 100644
--- a/src/vbox/vbox_tmpl.c
+++ b/src/vbox/vbox_tmpl.c
@@ -413,646 +413,6 @@ _vboxDomainSnapshotRestore(virDomainPtr dom,
     return ret;
 }
 
-#if VBOX_API_VERSION <= 2002000 || VBOX_API_VERSION >= 4000000
-    /* No Callback support for VirtualBox 2.2.* series */
-    /* No Callback support for VirtualBox 4.* series */
-
-static void
-_registerDomainEvent(virHypervisorDriverPtr driver)
-{
-    driver->connectDomainEventRegister = NULL;
-    driver->connectDomainEventDeregister = NULL;
-    driver->connectDomainEventRegisterAny = NULL;
-    driver->connectDomainEventDeregisterAny = NULL;
-}
-
-#else /* !(VBOX_API_VERSION == 2002000 || VBOX_API_VERSION >= 4000000) */
-
-/* Functions needed for Callbacks */
-static nsresult PR_COM_METHOD
-vboxCallbackOnMachineStateChange(IVirtualBoxCallback *pThis ATTRIBUTE_UNUSED,
-                                 PRUnichar *machineId, PRUint32 state)
-{
-    vboxCallbackPtr callback = (vboxCallbackPtr) pThis;
-    vboxDriverPtr data = callback->conn->privateData;
-    virDomainPtr dom = NULL;
-
-    int event = 0;
-    int detail = 0;
-
-    virObjectLock(data);
-
-    VIR_DEBUG("IVirtualBoxCallback: %p, State: %d", callback, state);
-    DEBUGPRUnichar("machineId", machineId);
-
-    if (machineId) {
-        char *machineIdUtf8 = NULL;
-        unsigned char uuid[VIR_UUID_BUFLEN];
-
-        data->pFuncs->pfnUtf16ToUtf8(machineId, &machineIdUtf8);
-        ignore_value(virUUIDParse(machineIdUtf8, uuid));
-
-        dom = vboxDomainLookupByUUID(callback->conn, uuid);
-        if (dom) {
-            virObjectEventPtr ev;
-
-            if (state == MachineState_Starting) {
-                event = VIR_DOMAIN_EVENT_STARTED;
-                detail = VIR_DOMAIN_EVENT_STARTED_BOOTED;
-            } else if (state == MachineState_Restoring) {
-                event = VIR_DOMAIN_EVENT_STARTED;
-                detail = VIR_DOMAIN_EVENT_STARTED_RESTORED;
-            } else if (state == MachineState_Paused) {
-                event = VIR_DOMAIN_EVENT_SUSPENDED;
-                detail = VIR_DOMAIN_EVENT_SUSPENDED_PAUSED;
-            } else if (state == MachineState_Running) {
-                event = VIR_DOMAIN_EVENT_RESUMED;
-                detail = VIR_DOMAIN_EVENT_RESUMED_UNPAUSED;
-            } else if (state == MachineState_PoweredOff) {
-                event = VIR_DOMAIN_EVENT_STOPPED;
-                detail = VIR_DOMAIN_EVENT_STOPPED_SHUTDOWN;
-            } else if (state == MachineState_Stopping) {
-                event = VIR_DOMAIN_EVENT_STOPPED;
-                detail = VIR_DOMAIN_EVENT_STOPPED_DESTROYED;
-            } else if (state == MachineState_Aborted) {
-                event = VIR_DOMAIN_EVENT_STOPPED;
-                detail = VIR_DOMAIN_EVENT_STOPPED_CRASHED;
-            } else if (state == MachineState_Saving) {
-                event = VIR_DOMAIN_EVENT_STOPPED;
-                detail = VIR_DOMAIN_EVENT_STOPPED_SAVED;
-            } else {
-                event = VIR_DOMAIN_EVENT_STOPPED;
-                detail = VIR_DOMAIN_EVENT_STOPPED_SHUTDOWN;
-            }
-
-            ev = virDomainEventLifecycleNewFromDom(dom, event, detail);
-
-            if (ev)
-                virObjectEventStateQueue(data->domainEventState, ev);
-        }
-    }
-
-    virObjectUnlock(data);
-
-    return NS_OK;
-}
-
-static nsresult PR_COM_METHOD
-vboxCallbackOnMachineDataChange(IVirtualBoxCallback *pThis ATTRIBUTE_UNUSED,
-                                PRUnichar *machineId)
-{
-    vboxCallbackPtr callback = (vboxCallbackPtr) pThis;
-    vboxDriverPtr data = callback->conn->privateData;
-
-    VIR_DEBUG("IVirtualBoxCallback: %p", pThis);
-    DEBUGPRUnichar("machineId", machineId);
-
-    return NS_OK;
-}
-
-static nsresult PR_COM_METHOD
-vboxCallbackOnExtraDataCanChange(IVirtualBoxCallback *pThis ATTRIBUTE_UNUSED,
-                                 PRUnichar *machineId, PRUnichar *key,
-                                 PRUnichar *value,
-                                 PRUnichar **error ATTRIBUTE_UNUSED,
-                                 PRBool *allowChange ATTRIBUTE_UNUSED)
-{
-    vboxCallbackPtr callback = (vboxCallbackPtr) pThis;
-    vboxDriverPtr data = callback->conn->privateData;
-
-    VIR_DEBUG("IVirtualBoxCallback: %p, allowChange: %s", pThis, *allowChange ? "true" : "false");
-    DEBUGPRUnichar("machineId", machineId);
-    DEBUGPRUnichar("key", key);
-    DEBUGPRUnichar("value", value);
-
-    return NS_OK;
-}
-
-static nsresult PR_COM_METHOD
-vboxCallbackOnExtraDataChange(IVirtualBoxCallback *pThis ATTRIBUTE_UNUSED,
-                              PRUnichar *machineId,
-                              PRUnichar *key, PRUnichar *value)
-{
-    vboxCallbackPtr callback = (vboxCallbackPtr) pThis;
-    vboxDriverPtr data = callback->conn->privateData;
-
-    VIR_DEBUG("IVirtualBoxCallback: %p", pThis);
-    DEBUGPRUnichar("machineId", machineId);
-    DEBUGPRUnichar("key", key);
-    DEBUGPRUnichar("value", value);
-
-    return NS_OK;
-}
-
-# if VBOX_API_VERSION < 3001000
-static nsresult PR_COM_METHOD
-vboxCallbackOnMediaRegistered(IVirtualBoxCallback *pThis ATTRIBUTE_UNUSED,
-                              PRUnichar *mediaId,
-                              PRUint32 mediaType ATTRIBUTE_UNUSED,
-                              PRBool registered ATTRIBUTE_UNUSED)
-{
-    vboxCallbackPtr callback = (vboxCallbackPtr) pThis;
-    vboxDriverPtr data = callback->conn->privateData;
-
-    VIR_DEBUG("IVirtualBoxCallback: %p, registered: %s", pThis, registered ? "true" : "false");
-    VIR_DEBUG("mediaType: %d", mediaType);
-    DEBUGPRUnichar("mediaId", mediaId);
-
-    return NS_OK;
-}
-# endif /* VBOX_API_VERSION >= 3001000 */
-
-static nsresult PR_COM_METHOD
-vboxCallbackOnMachineRegistered(IVirtualBoxCallback *pThis ATTRIBUTE_UNUSED,
-                                PRUnichar *machineId, PRBool registered)
-{
-    vboxCallbackPtr callback = (vboxCallbackPtr) pThis;
-    vboxDriverPtr data = callback->conn->privateData;
-    virDomainPtr dom = NULL;
-    int event = 0;
-    int detail = 0;
-
-    virObjectLock(data);
-
-    VIR_DEBUG("IVirtualBoxCallback: %p, registered: %s", pThis, registered ? "true" : "false");
-    DEBUGPRUnichar("machineId", machineId);
-
-    if (machineId) {
-        char *machineIdUtf8 = NULL;
-        unsigned char uuid[VIR_UUID_BUFLEN];
-
-        data->pFuncs->pfnUtf16ToUtf8(machineId, &machineIdUtf8);
-        ignore_value(virUUIDParse(machineIdUtf8, uuid));
-
-        dom = vboxDomainLookupByUUID(callback->conn, uuid);
-        if (dom) {
-            virObjectEventPtr ev;
-
-            /* CURRENT LIMITATION: we never get the VIR_DOMAIN_EVENT_UNDEFINED
-             * event because the when the machine is de-registered the call
-             * to vboxDomainLookupByUUID fails and thus we don't get any
-             * dom pointer which is necessary (null dom pointer doesn't work)
-             * to show the VIR_DOMAIN_EVENT_UNDEFINED event
-             */
-            if (registered) {
-                event = VIR_DOMAIN_EVENT_DEFINED;
-                detail = VIR_DOMAIN_EVENT_DEFINED_ADDED;
-            } else {
-                event = VIR_DOMAIN_EVENT_UNDEFINED;
-                detail = VIR_DOMAIN_EVENT_UNDEFINED_REMOVED;
-            }
-
-            ev = virDomainEventLifecycleNewFromDom(dom, event, detail);
-
-            if (ev)
-                virObjectEventStateQueue(data->domainEventState, ev);
-        }
-    }
-
-    virObjectUnlock(data);
-
-    return NS_OK;
-}
-
-static nsresult PR_COM_METHOD
-vboxCallbackOnSessionStateChange(IVirtualBoxCallback *pThis ATTRIBUTE_UNUSED,
-                                 PRUnichar *machineId,
-                                 PRUint32 state ATTRIBUTE_UNUSED)
-{
-    vboxCallbackPtr callback = (vboxCallbackPtr) pThis;
-    vboxDriverPtr data = callback->conn->privateData;
-
-    VIR_DEBUG("IVirtualBoxCallback: %p, state: %d", pThis, state);
-    DEBUGPRUnichar("machineId", machineId);
-
-    return NS_OK;
-}
-
-static nsresult PR_COM_METHOD
-vboxCallbackOnSnapshotTaken(IVirtualBoxCallback *pThis ATTRIBUTE_UNUSED,
-                            PRUnichar *machineId,
-                            PRUnichar *snapshotId)
-{
-    vboxCallbackPtr callback = (vboxCallbackPtr) pThis;
-    vboxDriverPtr data = callback->conn->privateData;
-
-    VIR_DEBUG("IVirtualBoxCallback: %p", pThis);
-    DEBUGPRUnichar("machineId", machineId);
-    DEBUGPRUnichar("snapshotId", snapshotId);
-
-    return NS_OK;
-}
-
-static nsresult PR_COM_METHOD
-vboxCallbackOnSnapshotDiscarded(IVirtualBoxCallback *pThis ATTRIBUTE_UNUSED,
-                                PRUnichar *machineId,
-                                PRUnichar *snapshotId)
-{
-    vboxCallbackPtr callback = (vboxCallbackPtr) pThis;
-    vboxDriverPtr data = callback->conn->privateData;
-
-    VIR_DEBUG("IVirtualBoxCallback: %p", pThis);
-    DEBUGPRUnichar("machineId", machineId);
-    DEBUGPRUnichar("snapshotId", snapshotId);
-
-    return NS_OK;
-}
-
-static nsresult PR_COM_METHOD
-vboxCallbackOnSnapshotChange(IVirtualBoxCallback *pThis ATTRIBUTE_UNUSED,
-                             PRUnichar *machineId,
-                             PRUnichar *snapshotId)
-{
-    vboxCallbackPtr callback = (vboxCallbackPtr) pThis;
-    vboxDriverPtr data = callback->conn->privateData;
-
-    VIR_DEBUG("IVirtualBoxCallback: %p", pThis);
-    DEBUGPRUnichar("machineId", machineId);
-    DEBUGPRUnichar("snapshotId", snapshotId);
-
-    return NS_OK;
-}
-
-static nsresult PR_COM_METHOD
-vboxCallbackOnGuestPropertyChange(IVirtualBoxCallback *pThis ATTRIBUTE_UNUSED,
-                                  PRUnichar *machineId, PRUnichar *name,
-                                  PRUnichar *value, PRUnichar *flags)
-{
-    vboxCallbackPtr callback = (vboxCallbackPtr) pThis;
-    vboxDriverPtr data = callback->conn->privateData;
-
-    VIR_DEBUG("IVirtualBoxCallback: %p", pThis);
-    DEBUGPRUnichar("machineId", machineId);
-    DEBUGPRUnichar("name", name);
-    DEBUGPRUnichar("value", value);
-    DEBUGPRUnichar("flags", flags);
-
-    return NS_OK;
-}
-
-static nsresult PR_COM_METHOD
-vboxCallbackAddRef(nsISupports *pThis ATTRIBUTE_UNUSED)
-{
-    vboxCallbackPtr callback = (vboxCallbackPtr) pThis;
-    nsresult c;
-
-    c = ++callback->vboxCallBackRefCount;
-
-    VIR_DEBUG("pThis: %p, vboxCallback AddRef: %d", pThis, c);
-
-    return c;
-}
-
-static nsresult PR_COM_METHOD
-vboxCallbackRelease(nsISupports *pThis)
-{
-    vboxCallbackPtr callback = (vboxCallbackPtr) pThis;
-    nsresult c;
-
-    c = --callback->vboxCallBackRefCount;
-    if (c == 0) {
-        /* delete object */
-        VIR_FREE(pThis->vtbl);
-        VIR_FREE(pThis);
-    }
-
-    VIR_DEBUG("pThis: %p, vboxCallback Release: %d", pThis, c);
-
-    return c;
-}
-
-static nsresult PR_COM_METHOD
-vboxCallbackQueryInterface(nsISupports *pThis, const nsID *iid, void **resultp)
-{
-    vboxCallbackPtr callback = (vboxCallbackPtr) pThis;
-    static const nsID ivirtualboxCallbackUUID = IVIRTUALBOXCALLBACK_IID;
-    static const nsID isupportIID = NS_ISUPPORTS_IID;
-
-    /* Match UUID for IVirtualBoxCallback class */
-    if (memcmp(iid, &ivirtualboxCallbackUUID, sizeof(nsID)) == 0 ||
-        memcmp(iid, &isupportIID, sizeof(nsID)) == 0) {
-        callback->vboxCallBackRefCount++;
-        *resultp = callback;
-
-        VIR_DEBUG("pThis: %p, vboxCallback QueryInterface: %d", pThis, callback->vboxCallBackRefCount);
-
-        return NS_OK;
-    }
-
-
-    VIR_DEBUG("pThis: %p, vboxCallback QueryInterface didn't find a matching interface", pThis);
-    DEBUGUUID("The UUID Callback Interface expects", iid);
-    DEBUGUUID("The UUID Callback Interface got", &ivirtualboxCallbackUUID);
-    return NS_NOINTERFACE;
-}
-
-
-static vboxCallbackPtr
-vboxAllocCallbackObj(virConnectPtr conn)
-{
-    vboxCallbackPtr callback = NULL;
-
-    /* Allocate, Initialize and return a valid
-     * IVirtualBoxCallback object here
-     */
-    if ((VIR_ALLOC(callback) < 0) || (VIR_ALLOC(callback->vtbl) < 0)) {
-        VIR_FREE(callback);
-        return NULL;
-    }
-
-    {
-        callback->vtbl->nsisupports.AddRef          = &vboxCallbackAddRef;
-        callback->vtbl->nsisupports.Release         = &vboxCallbackRelease;
-        callback->vtbl->nsisupports.QueryInterface  = &vboxCallbackQueryInterface;
-        callback->vtbl->OnMachineStateChange        = &vboxCallbackOnMachineStateChange;
-        callback->vtbl->OnMachineDataChange         = &vboxCallbackOnMachineDataChange;
-        callback->vtbl->OnExtraDataCanChange        = &vboxCallbackOnExtraDataCanChange;
-        callback->vtbl->OnExtraDataChange           = &vboxCallbackOnExtraDataChange;
-# if VBOX_API_VERSION < 3001000
-        callback->vtbl->OnMediaRegistered           = &vboxCallbackOnMediaRegistered;
-# else  /* VBOX_API_VERSION >= 3001000 */
-# endif /* VBOX_API_VERSION >= 3001000 */
-        callback->vtbl->OnMachineRegistered         = &vboxCallbackOnMachineRegistered;
-        callback->vtbl->OnSessionStateChange        = &vboxCallbackOnSessionStateChange;
-        callback->vtbl->OnSnapshotTaken             = &vboxCallbackOnSnapshotTaken;
-# if VBOX_API_VERSION < 3002000
-        callback->vtbl->OnSnapshotDiscarded         = &vboxCallbackOnSnapshotDiscarded;
-# else /* VBOX_API_VERSION >= 3002000 */
-        callback->vtbl->OnSnapshotDeleted           = &vboxCallbackOnSnapshotDiscarded;
-# endif /* VBOX_API_VERSION >= 3002000 */
-        callback->vtbl->OnSnapshotChange            = &vboxCallbackOnSnapshotChange;
-        callback->vtbl->OnGuestPropertyChange       = &vboxCallbackOnGuestPropertyChange;
-        callback->vboxCallBackRefCount = 1;
-    }
-
-    callback->conn = conn;
-
-    return callback;
-}
-
-static void vboxReadCallback(int watch ATTRIBUTE_UNUSED,
-                             int fd,
-                             int events ATTRIBUTE_UNUSED,
-                             void *opaque)
-{
-    vboxDriverPtr data = (vboxDriverPtr) opaque;
-    if (fd >= 0) {
-        data->vboxQueue->vtbl->ProcessPendingEvents(data->vboxQueue);
-    } else {
-        nsresult rc;
-        PLEvent *pEvent = NULL;
-
-        rc = data->vboxQueue->vtbl->WaitForEvent(data->vboxQueue, &pEvent);
-        if (NS_SUCCEEDED(rc))
-            data->vboxQueue->vtbl->HandleEvent(data->vboxQueue, pEvent);
-    }
-}
-
-static int
-vboxConnectDomainEventRegister(virConnectPtr conn,
-                               virConnectDomainEventCallback callback,
-                               void *opaque,
-                               virFreeCallback freecb)
-{
-    vboxDriverPtr data = conn->privateData;
-    int vboxRet = -1;
-    nsresult rc;
-    int ret = -1;
-
-    if (!data->vboxObj)
-        return ret;
-
-    /* Locking has to be there as callbacks are not
-     * really fully thread safe
-     */
-    virObjectLock(data);
-
-    if (data->vboxCallback == NULL) {
-        data->vboxCallback = vboxAllocCallbackObj(conn);
-        if (data->vboxCallback != NULL) {
-            rc = data->vboxObj->vtbl->RegisterCallback(data->vboxObj,
-                                                         (IVirtualBoxCallback *) data->vboxCallback);
-            if (NS_SUCCEEDED(rc))
-                vboxRet = 0;
-        }
-    } else {
-        vboxRet = 0;
-    }
-
-    /* Get the vbox file handle and add an event handle to it
-     * so that the events can be passed down to the user
-     */
-    if (vboxRet == 0) {
-        if (data->fdWatch < 0) {
-            PRInt32 vboxFileHandle;
-            vboxFileHandle = data->vboxQueue->vtbl->GetEventQueueSelectFD(data->vboxQueue);
-
-            data->fdWatch = virEventAddHandle(vboxFileHandle, VIR_EVENT_HANDLE_READABLE, vboxReadCallback, data, NULL);
-        }
-
-        if (data->fdWatch >= 0) {
-            /* Once a callback is registered with virtualbox, use a list
-             * to store the callbacks registered with libvirt so that
-             * later you can iterate over them
-             */
-
-            ret = virDomainEventStateRegister(conn, data->domainEventState,
-                                              callback, opaque, freecb);
-            VIR_DEBUG("virObjectEventStateRegister (ret = %d) (conn: %p, "
-                      "callback: %p, opaque: %p, "
-                      "freecb: %p)", ret, conn, callback,
-                      opaque, freecb);
-        }
-    }
-
-    virObjectUnlock(data);
-
-    if (ret >= 0) {
-        return 0;
-    } else {
-        if (data->vboxObj && data->vboxCallback)
-            data->vboxObj->vtbl->UnregisterCallback(data->vboxObj,
-                                                      (IVirtualBoxCallback *) data->vboxCallback);
-        return -1;
-    }
-}
-
-static int
-vboxConnectDomainEventDeregister(virConnectPtr conn,
-                                 virConnectDomainEventCallback callback)
-{
-    vboxDriverPtr data = conn->privateData;
-    int cnt;
-    int ret = -1;
-
-    if (!data->vboxObj)
-        return ret;
-
-    /* Locking has to be there as callbacks are not
-     * really fully thread safe
-     */
-    virObjectLock(data);
-
-    cnt = virDomainEventStateDeregister(conn, data->domainEventState,
-                                        callback);
-
-    if (data->vboxCallback && cnt == 0) {
-        data->vboxObj->vtbl->UnregisterCallback(data->vboxObj,
-                                                  (IVirtualBoxCallback *) data->vboxCallback);
-        VBOX_RELEASE(data->vboxCallback);
-
-        /* Remove the Event file handle on which we are listening as well */
-        virEventRemoveHandle(data->fdWatch);
-        data->fdWatch = -1;
-    }
-
-    virObjectUnlock(data);
-
-    if (cnt >= 0)
-        ret = 0;
-
-    return ret;
-}
-
-static int vboxConnectDomainEventRegisterAny(virConnectPtr conn,
-                                             virDomainPtr dom,
-                                             int eventID,
-                                             virConnectDomainEventGenericCallback callback,
-                                             void *opaque,
-                                             virFreeCallback freecb)
-{
-    vboxDriverPtr data = conn->privateData;
-    int vboxRet = -1;
-    nsresult rc;
-    int ret = -1;
-
-    if (!data->vboxObj)
-        return ret;
-
-    /* Locking has to be there as callbacks are not
-     * really fully thread safe
-     */
-    virObjectLock(data);
-
-    if (data->vboxCallback == NULL) {
-        data->vboxCallback = vboxAllocCallbackObj(conn);
-        if (data->vboxCallback != NULL) {
-            rc = data->vboxObj->vtbl->RegisterCallback(data->vboxObj,
-                                                         (IVirtualBoxCallback *) data->vboxCallback);
-            if (NS_SUCCEEDED(rc))
-                vboxRet = 0;
-        }
-    } else {
-        vboxRet = 0;
-    }
-
-    /* Get the vbox file handle and add an event handle to it
-     * so that the events can be passed down to the user
-     */
-    if (vboxRet == 0) {
-        if (data->fdWatch < 0) {
-            PRInt32 vboxFileHandle;
-            vboxFileHandle = data->vboxQueue->vtbl->GetEventQueueSelectFD(data->vboxQueue);
-
-            data->fdWatch = virEventAddHandle(vboxFileHandle, VIR_EVENT_HANDLE_READABLE, vboxReadCallback, data, NULL);
-        }
-
-        if (data->fdWatch >= 0) {
-            /* Once a callback is registered with virtualbox, use a list
-             * to store the callbacks registered with libvirt so that
-             * later you can iterate over them
-             */
-
-            if (virDomainEventStateRegisterID(conn, data->domainEventState,
-                                              dom, eventID,
-                                              callback, opaque, freecb, &ret) < 0)
-                ret = -1;
-            VIR_DEBUG("virDomainEventStateRegisterID (ret = %d) (conn: %p, "
-                      "callback: %p, opaque: %p, "
-                      "freecb: %p)", ret, conn, callback,
-                      opaque, freecb);
-        }
-    }
-
-    virObjectUnlock(data);
-
-    if (ret >= 0) {
-        return ret;
-    } else {
-        if (data->vboxObj && data->vboxCallback)
-            data->vboxObj->vtbl->UnregisterCallback(data->vboxObj,
-                                                      (IVirtualBoxCallback *) data->vboxCallback);
-        return -1;
-    }
-}
-
-static int
-vboxConnectDomainEventDeregisterAny(virConnectPtr conn,
-                                    int callbackID)
-{
-    vboxDriverPtr data = conn->privateData;
-    int cnt;
-    int ret = -1;
-
-    if (!data->vboxObj)
-        return ret;
-
-    /* Locking has to be there as callbacks are not
-     * really fully thread safe
-     */
-    virObjectLock(data);
-
-    cnt = virObjectEventStateDeregisterID(conn, data->domainEventState,
-                                          callbackID);
-
-    if (data->vboxCallback && cnt == 0) {
-        data->vboxObj->vtbl->UnregisterCallback(data->vboxObj,
-                                                  (IVirtualBoxCallback *) data->vboxCallback);
-        VBOX_RELEASE(data->vboxCallback);
-
-        /* Remove the Event file handle on which we are listening as well */
-        virEventRemoveHandle(data->fdWatch);
-        data->fdWatch = -1;
-    }
-
-    virObjectUnlock(data);
-
-    if (cnt >= 0)
-        ret = 0;
-
-    return ret;
-}
-
-static void
-_registerDomainEvent(virHypervisorDriverPtr driver)
-{
-    driver->connectDomainEventRegister = vboxConnectDomainEventRegister; /* 0.7.0 */
-    driver->connectDomainEventDeregister = vboxConnectDomainEventDeregister; /* 0.7.0 */
-    driver->connectDomainEventRegisterAny = vboxConnectDomainEventRegisterAny; /* 0.8.0 */
-    driver->connectDomainEventDeregisterAny = vboxConnectDomainEventDeregisterAny; /* 0.8.0 */
-}
-
-#endif /* !(VBOX_API_VERSION == 2002000 || VBOX_API_VERSION >= 4000000) */
-
-static int
-_initializeDomainEvent(vboxDriverPtr data ATTRIBUTE_UNUSED)
-{
-#if VBOX_API_VERSION <= 2002000 || VBOX_API_VERSION >= 4000000
-    /* No event queue functionality in 2.2.* and 4.* as of now */
-    vboxUnsupported();
-#else /* VBOX_API_VERSION > 2002000 || VBOX_API_VERSION < 4000000 */
-    /* Initialize the fWatch needed for Event Callbacks */
-    data->fdWatch = -1;
-    data->pFuncs->pfnGetEventQueue(&data->vboxQueue);
-    if (data->vboxQueue == NULL) {
-        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
-                       _("nsIEventQueue object is null"));
-        return -1;
-    }
-#endif /* VBOX_API_VERSION > 2002000 || VBOX_API_VERSION < 4000000 */
-    return 0;
-}
-
 static void
 _detachDevices(vboxDriverPtr data ATTRIBUTE_UNUSED,
                IMachine *machine ATTRIBUTE_UNUSED,
@@ -3302,7 +2662,6 @@ void NAME(InstallUniformedAPI)(vboxUniformedAPI *pVBoxAPI)
 {
     pVBoxAPI->APIVersion = VBOX_API_VERSION;
     pVBoxAPI->XPCOMCVersion = VBOX_XPCOMC_VERSION;
-    pVBoxAPI->initializeDomainEvent = _initializeDomainEvent;
     pVBoxAPI->detachDevices = _detachDevices;
     pVBoxAPI->unregisterMachine = _unregisterMachine;
     pVBoxAPI->deleteConfig = _deleteConfig;
@@ -3315,7 +2674,6 @@ void NAME(InstallUniformedAPI)(vboxUniformedAPI *pVBoxAPI)
     pVBoxAPI->attachFloppy = _attachFloppy;
     pVBoxAPI->detachFloppy = _detachFloppy;
     pVBoxAPI->snapshotRestore = _vboxDomainSnapshotRestore;
-    pVBoxAPI->registerDomainEvent = _registerDomainEvent;
     pVBoxAPI->UPFN = _UPFN;
     pVBoxAPI->UIID = _UIID;
     pVBoxAPI->UArray = _UArray;
@@ -3346,12 +2704,6 @@ void NAME(InstallUniformedAPI)(vboxUniformedAPI *pVBoxAPI)
     pVBoxAPI->UIKeyboard = _UIKeyboard;
     pVBoxAPI->machineStateChecker = _machineStateChecker;
 
-#if VBOX_API_VERSION <= 2002000 || VBOX_API_VERSION >= 4000000
-    pVBoxAPI->domainEventCallbacks = 0;
-#else /* VBOX_API_VERSION > 2002000 || VBOX_API_VERSION < 4000000 */
-    pVBoxAPI->domainEventCallbacks = 1;
-#endif /* VBOX_API_VERSION > 2002000 || VBOX_API_VERSION < 4000000 */
-
 #if VBOX_API_VERSION >= 4001000
     pVBoxAPI->chipsetType = 1;
 #else /* VBOX_API_VERSION < 4001000 */
diff --git a/src/vbox/vbox_uniformed_api.h b/src/vbox/vbox_uniformed_api.h
index abb8486..9c9aff9 100644
--- a/src/vbox/vbox_uniformed_api.h
+++ b/src/vbox/vbox_uniformed_api.h
@@ -27,7 +27,7 @@
  *
  * The vbox_tmpl.c is the only place where the driver knows the inside
  * architecture of those vbox structs(vboxObj, vboxSession,
- * pFuncs, vboxCallback and vboxQueue). The file should be included
+ * pFuncs, and vboxCallback). The file should be included
  * after the currect vbox_CAPI_v*.h, then we can use the vbox structs
  * in vboxGlobalData. The vbox_tmpl.c should implement functions
  * defined in vboxUniformedAPI.
@@ -36,7 +36,7 @@
  * The vbox_driver.c collects vboxUniformedAPI for all versions.
  * Then vboxRegister calls the vboxRegisterUniformedAPI to register.
  * Note: In vbox_driver.c, the vbox structs in vboxGlobalData is
- * defined by vbox_CAPI_v2.2.h.
+ * defined by vbox_CAPI_v4_0.h.
  *
  * The vbox_common.c, it is used to generate common codes for all vbox
  * versions. Bacause the same member varible's offset in a vbox struct
@@ -96,14 +96,6 @@ typedef union {
     PRInt32 resultCode;
 } resultCodeUnion;
 
-struct _vboxCallback {
-    struct IVirtualBoxCallback_vtbl *vtbl;
-    virConnectPtr conn;
-    int vboxCallBackRefCount;
-};
-
-typedef struct _vboxCallback vboxCallback;
-typedef struct _vboxCallback *vboxCallbackPtr;
 
 struct _vboxDriver {
     virObjectLockable parent;
@@ -120,13 +112,6 @@ struct _vboxDriver {
     IVirtualBoxClient *vboxClient;
 # endif
 
-    int fdWatch;
-    vboxCallbackPtr vboxCallback;
-# if VBOX_API_VERSION > 2002000 && VBOX_API_VERSION < 4000000
-    nsIEventQueue *vboxQueue;
-# else
-    void *vboxQueue;
-# endif
     unsigned long version;
 
     /* reference counting of vbox connections */
@@ -548,7 +533,6 @@ typedef struct {
     uint32_t APIVersion;
     uint32_t XPCOMCVersion;
     /* vbox APIs */
-    int (*initializeDomainEvent)(vboxDriverPtr driver);
     void (*detachDevices)(vboxDriverPtr driver, IMachine *machine, PRUnichar *hddcnameUtf16);
     nsresult (*unregisterMachine)(vboxDriverPtr driver, vboxIIDUnion *iidu, IMachine **machine);
     void (*deleteConfig)(IMachine *machine);
@@ -562,7 +546,6 @@ typedef struct {
     int (*attachFloppy)(vboxDriverPtr driver, IMachine *machine, const char *src);
     int (*detachFloppy)(IMachine *machine);
     int (*snapshotRestore)(virDomainPtr dom, IMachine *machine, ISnapshot *snapshot);
-    void (*registerDomainEvent)(virHypervisorDriverPtr driver);
     vboxUniformedPFN UPFN;
     vboxUniformedIID UIID;
     vboxUniformedArray UArray;
@@ -593,7 +576,6 @@ typedef struct {
     vboxUniformedIKeyboard UIKeyboard;
     uniformedMachineStateChecker machineStateChecker;
     /* vbox API features */
-    bool domainEventCallbacks;
     bool chipsetType;
     bool accelerate2DVideo;
     bool oldMediumInterface;
-- 
2.9.3




More information about the libvir-list mailing list