[libvirt] [PATCH 6/7] libxl: Convert to virDomainEventState

Daniel P. Berrange berrange at redhat.com
Fri May 13 09:26:07 UTC 2011


On Thu, May 12, 2011 at 01:14:30PM -0400, Cole Robinson wrote:
> 
> Signed-off-by: Cole Robinson <crobinso at redhat.com>
> ---
>  src/libxl/libxl_conf.h   |    6 +---
>  src/libxl/libxl_driver.c |   80 +++++++++++++--------------------------------
>  2 files changed, 24 insertions(+), 62 deletions(-)
> 
> diff --git a/src/libxl/libxl_conf.h b/src/libxl/libxl_conf.h
> index 8c87786..65110cf 100644
> --- a/src/libxl/libxl_conf.h
> +++ b/src/libxl/libxl_conf.h
> @@ -61,11 +61,7 @@ struct _libxlDriverPrivate {
>      virBitmapPtr reservedVNCPorts;
>      virDomainObjList domains;
>  
> -    /* A list of callbacks */
> -    virDomainEventCallbackListPtr domainEventCallbacks;
> -    virDomainEventQueuePtr domainEventQueue;
> -    int domainEventTimer;
> -    int domainEventDispatching;
> +    virDomainEventStatePtr domainEventState;
>  
>      char *configDir;
>      char *autostartDir;
> diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c
> index d7ff0c6..a1c4509 100644
> --- a/src/libxl/libxl_driver.c
> +++ b/src/libxl/libxl_driver.c
> @@ -130,28 +130,11 @@ static void
>  libxlDomainEventFlush(int timer ATTRIBUTE_UNUSED, void *opaque)
>  {
>      libxlDriverPrivatePtr driver = opaque;
> -    virDomainEventQueue tempQueue;
>  
>      libxlDriverLock(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,
> -                                libxlDomainEventDispatchFunc,
> -                                driver);
> -
> -    /* Purge any deleted callbacks */
> -    virDomainEventCallbackListPurgeMarked(driver->domainEventCallbacks);
> -
> -    driver->domainEventDispatching = 0;
> +    virDomainEventStateFlush(driver->domainEventState,
> +                             libxmlDomainEventDispatchFunc,
> +                             driver);
>      libxlDriverUnlock(driver);
>  }
>  
> @@ -159,10 +142,7 @@ libxlDomainEventFlush(int timer ATTRIBUTE_UNUSED, void *opaque)
>  static void
>  libxlDomainEventQueue(libxlDriverPrivatePtr driver, virDomainEventPtr event)
>  {
> -    if (virDomainEventQueuePush(driver->domainEventQueue, event) < 0)
> -        virDomainEventFree(event);
> -    if (driver->domainEventQueue->count == 1)
> -        virEventUpdateTimeout(driver->domainEventTimer, 0);
> +    virDomainEventStateQueue(driver->domainEventState, event);
>  }
>  
>  /*
> @@ -706,12 +686,7 @@ libxlShutdown(void)
>      VIR_FREE(libxl_driver->libDir);
>      VIR_FREE(libxl_driver->saveDir);
>  
> -    /* Free domain callback list */
> -    virDomainEventCallbackListFree(libxl_driver->domainEventCallbacks);
> -    virDomainEventQueueFree(libxl_driver->domainEventQueue);
> -
> -    if (libxl_driver->domainEventTimer != -1)
> -        virEventRemoveTimeout(libxl_driver->domainEventTimer);
> +    virDomainEventStateFree(privconn->domainEventState);
>  
>      libxlDriverUnlock(libxl_driver);
>      virMutexDestroy(&libxl_driver->lock);
> @@ -822,16 +797,14 @@ libxlStartup(int privileged) {
>      }
>      VIR_FREE(log_file);
>  
> -    /* Init callback list */
> -    if (VIR_ALLOC(libxl_driver->domainEventCallbacks) < 0)
> -        goto out_of_memory;
> -    if (!(libxl_driver->domainEventQueue = virDomainEventQueueNew()))
> -        goto out_of_memory;
> -    if ((libxl_driver->domainEventTimer =
> -         virEventAddTimeout(-1, libxlDomainEventFlush, libxl_driver, NULL)) < 0)
> +    libxl_driver->domainEventState = virDomainEventStateNew(
> +                                                        libxlDomainEventFlush,
> +                                                        libxml_driver,
> +                                                        NULL,
> +                                                        false);
> +    if (!libxml_driver->domainEventState)
>          goto error;
>  
> -
>      libxl_driver->logger =
>              (xentoollog_logger *)xtl_createlogger_stdiostream(libxl_driver->logger_file, XTL_DEBUG,  0);
>      if (!libxl_driver->logger) {
> @@ -982,7 +955,8 @@ libxlClose(virConnectPtr conn ATTRIBUTE_UNUSED)
>      libxlDriverPrivatePtr driver = conn->privateData;
>  
>      libxlDriverLock(driver);
> -    virDomainEventCallbackListRemoveConn(conn, driver->domainEventCallbacks);
> +    virDomainEventCallbackListRemoveConn(conn,
> +                                         driver->domainEventState->callbacks);
>      libxlDriverUnlock(driver);
>      conn->privateData = NULL;
>      return 0;
> @@ -2224,7 +2198,8 @@ libxlDomainEventRegister(virConnectPtr conn,
>      int ret;
>  
>      libxlDriverLock(driver);
> -    ret = virDomainEventCallbackListAdd(conn, driver->domainEventCallbacks,
> +    ret = virDomainEventCallbackListAdd(conn,
> +                                        driver->domainEventState->callbacks,
>                                          callback, opaque, freecb);
>      libxlDriverUnlock(driver);
>  
> @@ -2240,14 +2215,9 @@ libxlDomainEventDeregister(virConnectPtr conn,
>      int ret;
>  
>      libxlDriverLock(driver);
> -    if (driver->domainEventDispatching)
> -        ret = virDomainEventCallbackListMarkDelete(conn,
> -                                                   driver->domainEventCallbacks,
> -                                                   callback);
> -    else
> -        ret = virDomainEventCallbackListRemove(conn,
> -                                               driver->domainEventCallbacks,
> -                                               callback);
> +    ret = virDomainEventStateDeregister(conn,
> +                                        driver->domainEventState,
> +                                        callback);
>      libxlDriverUnlock(driver);
>  
>      return ret;
> @@ -2648,7 +2618,8 @@ libxlDomainEventRegisterAny(virConnectPtr conn, virDomainPtr dom, int eventID,
>      int ret;
>  
>      libxlDriverLock(driver);
> -    ret = virDomainEventCallbackListAddID(conn, driver->domainEventCallbacks,
> +    ret = virDomainEventCallbackListAddID(conn,
> +                                          driver->domainEventState->callbacks,
>                                            dom, eventID, callback, opaque,
>                                            freecb);
>      libxlDriverUnlock(driver);
> @@ -2664,14 +2635,9 @@ libxlDomainEventDeregisterAny(virConnectPtr conn, int callbackID)
>      int ret;
>  
>      libxlDriverLock(driver);
> -    if (driver->domainEventDispatching)
> -        ret = virDomainEventCallbackListMarkDeleteID(conn,
> -                                                     driver->domainEventCallbacks,
> -                                                     callbackID);
> -    else
> -        ret = virDomainEventCallbackListRemoveID(conn,
> -                                                 driver->domainEventCallbacks,
> -                                                 callbackID);
> +    ret = virDomainEventStateDeregisterAny(conn,
> +                                           driver->domainEventState,
> +                                           callbackID);
>      libxlDriverUnlock(driver);
>  
>      return ret;

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