[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