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

Cole Robinson crobinso at redhat.com
Thu Jan 13 15:23:21 UTC 2011


On 01/13/2011 08:16 AM, Daniel P. Berrange wrote:
> 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 ?
> 

For QEMU it is fatal, since the remote driver should always be
registering event handlers. But for the 'test' driver that isn't true.

> 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

Sounds good.

Thanks,
Cole




More information about the libvir-list mailing list