[libvirt] [PATCH 3/6] qemu: Use virDomainEventState helpers

Daniel P. Berrange berrange at redhat.com
Thu Jan 13 13:16:59 UTC 2011


On Mon, Jan 10, 2011 at 03:28:57PM -0500, Cole Robinson wrote:
> v2:
>     Drop libvirt_private.syms changes
> 
> Signed-off-by: Cole Robinson <crobinso at redhat.com>
> ---
>  src/qemu/qemu_conf.h   |    6 +---
>  src/qemu/qemu_driver.c |   80 +++++++++++++++--------------------------------
>  2 files changed, 27 insertions(+), 59 deletions(-)
> 
> diff --git a/src/qemu/qemu_conf.h b/src/qemu/qemu_conf.h
> index 5a5748b..2d878b5 100644
> --- a/src/qemu/qemu_conf.h
> +++ b/src/qemu/qemu_conf.h
> @@ -107,11 +107,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_driver.c b/src/qemu/qemu_driver.c
> index 9eb9cd5..5acf1d9 100644
> --- a/src/qemu/qemu_driver.c
> +++ b/src/qemu/qemu_driver.c
> @@ -1185,15 +1185,17 @@ 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);
> +    if (!qemu_driver->domainEventState)
>          goto error;
> +    if (!qemu_driver->domainEventState->timer < 0) {
> +        qemuReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> +                        _("could not initialize domain event timer"));
> +        goto error;
> +    }

I'm curious about this ->timer < 0 check here. I'd kind of expect
the 'domainEventState' struct to be opaque, and only accessible
to the helper APIs you added as virDomainEventStateXXX. Could the
virDomainEventStateNew() function simply return NULL if it was
unable to initilize the timer, or is there a need for this to
be treated as a non-fatal scenario ?

If it needs to be treated as non-fatal, could we pass in a bool
flag to virDomainEventStateNew()   'bool requireTimer' so that
it can enforce this itself rather than making the callers check

Daniel




More information about the libvir-list mailing list