[libvirt] [PATCH 3/7] qemu: Use virDomainEventState helpers
Daniel P. Berrange
berrange at redhat.com
Fri May 13 09:24:35 UTC 2011
On Thu, May 12, 2011 at 01:14:27PM -0400, Cole Robinson wrote:
> v2:
> Drop libvirt_private.syms changes
>
> v3:
> Adjust for new virDomainEventStateNew argument
>
> Signed-off-by: Cole Robinson <crobinso at redhat.com>
> ---
> src/qemu/qemu_conf.h | 6 +-----
> src/qemu/qemu_domain.c | 29 ++++-------------------------
> src/qemu/qemu_driver.c | 46 ++++++++++++++++++----------------------------
> 3 files changed, 23 insertions(+), 58 deletions(-)
>
> diff --git a/src/qemu/qemu_conf.h b/src/qemu/qemu_conf.h
> index f2bfa1e..ceec16d 100644
> --- a/src/qemu/qemu_conf.h
> +++ b/src/qemu/qemu_conf.h
> @@ -109,11 +109,7 @@ struct qemud_driver {
>
> virCapsPtr caps;
>
> - /* An array of callbacks */
> - virDomainEventCallbackListPtr domainEventCallbacks;
> - virDomainEventQueuePtr domainEventQueue;
> - int domainEventTimer;
> - int domainEventDispatching;
> + virDomainEventStatePtr domainEventState;
>
> char *securityDriverName;
> virSecurityManagerPtr securityManager;
> diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
> index 19e1938..fd465e5 100644
> --- a/src/qemu/qemu_domain.c
> +++ b/src/qemu/qemu_domain.c
> @@ -65,28 +65,11 @@ static void qemuDomainEventDispatchFunc(virConnectPtr conn,
> void qemuDomainEventFlush(int timer ATTRIBUTE_UNUSED, void *opaque)
> {
> struct qemud_driver *driver = opaque;
> - virDomainEventQueue tempQueue;
>
> qemuDriverLock(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,
> - qemuDomainEventDispatchFunc,
> - driver);
> -
> - /* Purge any deleted callbacks */
> - virDomainEventCallbackListPurgeMarked(driver->domainEventCallbacks);
> -
> - driver->domainEventDispatching = 0;
> + virDomainEventStateFlush(driver->domainEventState,
> + qemuDomainEventDispatchFunc,
> + driver);
> qemuDriverUnlock(driver);
> }
>
> @@ -95,11 +78,7 @@ void qemuDomainEventFlush(int timer ATTRIBUTE_UNUSED, void *opaque)
> void qemuDomainEventQueue(struct qemud_driver *driver,
> virDomainEventPtr event)
> {
> - if (virDomainEventQueuePush(driver->domainEventQueue,
> - event) < 0)
> - virDomainEventFree(event);
> - if (driver->domainEventQueue->count == 1)
> - virEventUpdateTimeout(driver->domainEventTimer, 0);
> + virDomainEventStateQueue(driver->domainEventState, event);
> }
>
>
> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
> index 732c187..f98c163 100644
> --- a/src/qemu/qemu_driver.c
> +++ b/src/qemu/qemu_driver.c
> @@ -393,14 +393,12 @@ qemudStartup(int privileged) {
> if (virDomainObjListInit(&qemu_driver->domains) < 0)
> goto out_of_memory;
>
> - /* Init callback list */
> - if (VIR_ALLOC(qemu_driver->domainEventCallbacks) < 0)
> - goto out_of_memory;
> - if (!(qemu_driver->domainEventQueue = virDomainEventQueueNew()))
> - goto out_of_memory;
> -
> - if ((qemu_driver->domainEventTimer =
> - virEventAddTimeout(-1, qemuDomainEventFlush, qemu_driver, NULL)) < 0)
> + /* Init domain events */
> + qemu_driver->domainEventState = virDomainEventStateNew(qemuDomainEventFlush,
> + qemu_driver,
> + NULL,
> + true);
> + if (!qemu_driver->domainEventState)
> goto error;
>
> /* Allocate bitmap for vnc port reservation */
> @@ -764,11 +762,7 @@ qemudShutdown(void) {
> }
>
> /* Free domain callback list */
> - virDomainEventCallbackListFree(qemu_driver->domainEventCallbacks);
> - virDomainEventQueueFree(qemu_driver->domainEventQueue);
> -
> - if (qemu_driver->domainEventTimer != -1)
> - virEventRemoveTimeout(qemu_driver->domainEventTimer);
> + virDomainEventStateFree(qemu_driver->domainEventState);
>
> if (qemu_driver->brctl)
> brShutdown(qemu_driver->brctl);
> @@ -856,7 +850,8 @@ static int qemudClose(virConnectPtr conn) {
>
> /* Get rid of callbacks registered for this conn */
> qemuDriverLock(driver);
> - virDomainEventCallbackListRemoveConn(conn, driver->domainEventCallbacks);
> + virDomainEventCallbackListRemoveConn(conn,
> + driver->domainEventState->callbacks);
> qemuDriverUnlock(driver);
>
> conn->privateData = NULL;
> @@ -5563,7 +5558,8 @@ qemuDomainEventRegister(virConnectPtr conn,
> int ret;
>
> qemuDriverLock(driver);
> - ret = virDomainEventCallbackListAdd(conn, driver->domainEventCallbacks,
> + ret = virDomainEventCallbackListAdd(conn,
> + driver->domainEventState->callbacks,
> callback, opaque, freecb);
> qemuDriverUnlock(driver);
>
> @@ -5579,12 +5575,9 @@ qemuDomainEventDeregister(virConnectPtr conn,
> int ret;
>
> qemuDriverLock(driver);
> - if (driver->domainEventDispatching)
> - ret = virDomainEventCallbackListMarkDelete(conn, driver->domainEventCallbacks,
> - callback);
> - else
> - ret = virDomainEventCallbackListRemove(conn, driver->domainEventCallbacks,
> - callback);
> + ret = virDomainEventStateDeregister(conn,
> + driver->domainEventState,
> + callback);
> qemuDriverUnlock(driver);
>
> return ret;
> @@ -5604,7 +5597,7 @@ qemuDomainEventRegisterAny(virConnectPtr conn,
>
> qemuDriverLock(driver);
> ret = virDomainEventCallbackListAddID(conn,
> - driver->domainEventCallbacks,
> + driver->domainEventState->callbacks,
> dom, eventID,
> callback, opaque, freecb);
> qemuDriverUnlock(driver);
> @@ -5621,12 +5614,9 @@ qemuDomainEventDeregisterAny(virConnectPtr conn,
> int ret;
>
> qemuDriverLock(driver);
> - if (driver->domainEventDispatching)
> - ret = virDomainEventCallbackListMarkDeleteID(conn, driver->domainEventCallbacks,
> - callbackID);
> - else
> - ret = virDomainEventCallbackListRemoveID(conn, driver->domainEventCallbacks,
> - callbackID);
> + ret = virDomainEventStateDeregisterAny(conn,
> + driver->domainEventState,
> + callbackID);
> qemuDriverUnlock(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