[libvirt] [PATCH 5/7] test: Use virDomainEventState helpers

Daniel P. Berrange berrange at redhat.com
Fri May 13 09:25:47 UTC 2011


On Thu, May 12, 2011 at 01:14:29PM -0400, Cole Robinson wrote:
> v3:
>     Adjust for new virDomainEventStateNew argument
> 
> Signed-off-by: Cole Robinson <crobinso at redhat.com>
> ---
>  src/test/test_driver.c |  105 +++++++++++++++---------------------------------
>  1 files changed, 32 insertions(+), 73 deletions(-)
> 
> diff --git a/src/test/test_driver.c b/src/test/test_driver.c
> index bf33d13..f244a0f 100644
> --- a/src/test/test_driver.c
> +++ b/src/test/test_driver.c
> @@ -90,12 +90,7 @@ struct _testConn {
>      int numCells;
>      testCell cells[MAX_CELLS];
>  
> -
> -    /* An array of callbacks */
> -    virDomainEventCallbackListPtr domainEventCallbacks;
> -    virDomainEventQueuePtr domainEventQueue;
> -    int domainEventTimer;
> -    int domainEventDispatching;
> +    virDomainEventStatePtr domainEventState;
>  };
>  typedef struct _testConn testConn;
>  typedef struct _testConn *testConnPtr;
> @@ -1124,6 +1119,7 @@ static virDrvOpenStatus testOpen(virConnectPtr conn,
>                      int flags ATTRIBUTE_UNUSED)
>  {
>      int ret;
> +    testConnPtr privconn;
>  
>      if (!conn->uri)
>          return VIR_DRV_OPEN_DECLINED;
> @@ -1150,26 +1146,25 @@ static virDrvOpenStatus testOpen(virConnectPtr conn,
>          ret = testOpenFromFile(conn,
>                                 conn->uri->path);
>  
> -    if (ret == VIR_DRV_OPEN_SUCCESS) {
> -        testConnPtr privconn = conn->privateData;
> -        testDriverLock(privconn);
> -        /* Init callback list */
> -        if (VIR_ALLOC(privconn->domainEventCallbacks) < 0 ||
> -            !(privconn->domainEventQueue = virDomainEventQueueNew())) {
> -            virReportOOMError();
> -            testDriverUnlock(privconn);
> -            testClose(conn);
> -            return VIR_DRV_OPEN_ERROR;
> -        }
> +    if (ret != VIR_DRV_OPEN_SUCCESS)
> +        return ret;
> +
> +    privconn = conn->privateData;
> +    testDriverLock(privconn);
>  
> -        if ((privconn->domainEventTimer =
> -             virEventAddTimeout(-1, testDomainEventFlush, privconn, NULL)) < 0)
> -            VIR_DEBUG("virEventAddTimeout failed: No addTimeoutImpl defined. "
> -                   "continuing without events.");
> +    privconn->domainEventState = virDomainEventStateNew(testDomainEventFlush,
> +                                                        privconn,
> +                                                        NULL,
> +                                                        false);
> +    if (!privconn->domainEventState) {
>          testDriverUnlock(privconn);
> +        testClose(conn);
> +        return VIR_DRV_OPEN_ERROR;
>      }
>  
> -    return (ret);
> +    testDriverUnlock(privconn);
> +
> +    return VIR_DRV_OPEN_SUCCESS;
>  }
>  
>  static int testClose(virConnectPtr conn)
> @@ -1182,12 +1177,7 @@ static int testClose(virConnectPtr conn)
>      virNetworkObjListFree(&privconn->networks);
>      virInterfaceObjListFree(&privconn->ifaces);
>      virStoragePoolObjListFree(&privconn->pools);
> -
> -    virDomainEventCallbackListFree(privconn->domainEventCallbacks);
> -    virDomainEventQueueFree(privconn->domainEventQueue);
> -
> -    if (privconn->domainEventTimer != -1)
> -        virEventRemoveTimeout(privconn->domainEventTimer);
> +    virDomainEventStateFree(privconn->domainEventState);
>  
>      testDriverUnlock(privconn);
>      virMutexDestroy(&privconn->lock);
> @@ -5177,7 +5167,8 @@ testDomainEventRegister(virConnectPtr conn,
>      int ret;
>  
>      testDriverLock(driver);
> -    ret = virDomainEventCallbackListAdd(conn, driver->domainEventCallbacks,
> +    ret = virDomainEventCallbackListAdd(conn,
> +                                        driver->domainEventState->callbacks,
>                                          callback, opaque, freecb);
>      testDriverUnlock(driver);
>  
> @@ -5193,12 +5184,9 @@ testDomainEventDeregister(virConnectPtr conn,
>      int ret;
>  
>      testDriverLock(driver);
> -    if (driver->domainEventDispatching)
> -        ret = virDomainEventCallbackListMarkDelete(conn, driver->domainEventCallbacks,
> -                                                   callback);
> -    else
> -        ret = virDomainEventCallbackListRemove(conn, driver->domainEventCallbacks,
> -                                               callback);
> +    ret = virDomainEventStateDeregister(conn,
> +                                        driver->domainEventState,
> +                                        callback);
>      testDriverUnlock(driver);
>  
>      return ret;
> @@ -5217,7 +5205,8 @@ testDomainEventRegisterAny(virConnectPtr conn,
>      int ret;
>  
>      testDriverLock(driver);
> -    ret = virDomainEventCallbackListAddID(conn, driver->domainEventCallbacks,
> +    ret = virDomainEventCallbackListAddID(conn,
> +                                          driver->domainEventState->callbacks,
>                                            dom, eventID,
>                                            callback, opaque, freecb);
>      testDriverUnlock(driver);
> @@ -5233,12 +5222,9 @@ testDomainEventDeregisterAny(virConnectPtr conn,
>      int ret;
>  
>      testDriverLock(driver);
> -    if (driver->domainEventDispatching)
> -        ret = virDomainEventCallbackListMarkDeleteID(conn, driver->domainEventCallbacks,
> -                                                     callbackID);
> -    else
> -        ret = virDomainEventCallbackListRemoveID(conn, driver->domainEventCallbacks,
> -                                                 callbackID);
> +    ret = virDomainEventStateDeregisterAny(conn,
> +                                           driver->domainEventState,
> +                                           callbackID);
>      testDriverUnlock(driver);
>  
>      return ret;
> @@ -5262,28 +5248,11 @@ static void testDomainEventDispatchFunc(virConnectPtr conn,
>  static void testDomainEventFlush(int timer ATTRIBUTE_UNUSED, void *opaque)
>  {
>      testConnPtr driver = opaque;
> -    virDomainEventQueue tempQueue;
>  
>      testDriverLock(driver);
> -
> -    driver->domainEventDispatching = 1;
> -
> -    /* Copy the queue, so we're reentrant safe */
> -    tempQueue.count = driver->domainEventQueue->count;
> -    tempQueue.events = driver->domainEventQueue->events;
> -    driver->domainEventQueue->count = 0;
> -    driver->domainEventQueue->events = NULL;
> -
> -    virEventUpdateTimeout(driver->domainEventTimer, -1);
> -    virDomainEventQueueDispatch(&tempQueue,
> -                                driver->domainEventCallbacks,
> -                                testDomainEventDispatchFunc,
> -                                driver);
> -
> -    /* Purge any deleted callbacks */
> -    virDomainEventCallbackListPurgeMarked(driver->domainEventCallbacks);
> -
> -    driver->domainEventDispatching = 0;
> +    virDomainEventStateFlush(driver->domainEventState,
> +                             testDomainEventDispatchFunc,
> +                             driver);
>      testDriverUnlock(driver);
>  }
>  
> @@ -5292,17 +5261,7 @@ static void testDomainEventFlush(int timer ATTRIBUTE_UNUSED, void *opaque)
>  static void testDomainEventQueue(testConnPtr driver,
>                                   virDomainEventPtr event)
>  {
> -    if (driver->domainEventTimer < 0) {
> -        virDomainEventFree(event);
> -        return;
> -    }
> -
> -    if (virDomainEventQueuePush(driver->domainEventQueue,
> -                                event) < 0)
> -        virDomainEventFree(event);
> -
> -    if (driver->domainEventQueue->count == 1)
> -        virEventUpdateTimeout(driver->domainEventTimer, 0);
> +    virDomainEventStateQueue(driver->domainEventState, event);
>  }
>  
>  static virDrvOpenStatus testSecretOpen(virConnectPtr conn,

ACK

Daniel
-- 
|: http://berrange.com      -o-    http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org              -o-             http://virt-manager.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org       -o-       http://live.gnome.org/gtk-vnc :|




More information about the libvir-list mailing list