[libvirt] [PATCH 7/8] Hide use of timers for domain event dispatch
Daniel P. Berrange
berrange at redhat.com
Mon Dec 19 10:54:26 UTC 2011
On Wed, Dec 14, 2011 at 01:56:36PM -0700, Eric Blake wrote:
> On 12/13/2011 05:38 PM, Daniel P. Berrange wrote:
> > From: "Daniel P. Berrange" <berrange at redhat.com>
> >
> > Currently all drivers using domain events need to provide a callback
> > for handling a timer to dispatch events in a clean stack. There is
> > no technical reason for dispatch to go via driver specific code. It
> > could trivially be dispatched directly from the domain event code,
> > thus removing tedious boilerplate code from all drivers
>
> I think the couple hunks I mentioned in 4/8 remote_driver.c belong in here.
>
> >
> > * src/conf/domain_event.c, src/conf/domain_event.h: Internalize
> > dispatch of events from timer callback
> > * src/libxl/libxl_driver.c, src/lxc/lxc_driver.c,
> > src/qemu/qemu_domain.c, src/qemu/qemu_driver.c,
> > src/remote/remote_driver.c, src/test/test_driver.c,
> > src/uml/uml_driver.c, src/vbox/vbox_tmpl.c,
> > src/xen/xen_driver.c: Remove all timer dispatch functions
> > ---
> > src/conf/domain_event.c | 86 +++++++++++++++++++++++++++++---------------
> > src/conf/domain_event.h | 32 +----------------
> > src/libxl/libxl_driver.c | 30 +---------------
> > src/lxc/lxc_driver.c | 33 +----------------
> > src/qemu/qemu_domain.c | 25 -------------
> > src/qemu/qemu_driver.c | 5 +--
> > src/remote/remote_driver.c | 37 +------------------
> > src/test/test_driver.c | 32 +----------------
> > src/uml/uml_driver.c | 33 +----------------
> > src/vbox/vbox_tmpl.c | 45 +----------------------
> > src/xen/xen_driver.c | 40 +--------------------
> > 11 files changed, 66 insertions(+), 332 deletions(-)
>
> More impressive deletion numbers.
>
> > @@ -1230,10 +1244,11 @@ void virDomainEventDispatch(virDomainEventPtr event,
> > }
> >
> >
> > -void virDomainEventQueueDispatch(virDomainEventQueuePtr queue,
> > - virDomainEventCallbackListPtr callbacks,
> > - virDomainEventDispatchFunc dispatch,
> > - void *opaque)
> > +static void
> > +virDomainEventQueueDispatch(virDomainEventQueuePtr queue,
>
> In most cases, you changed things to start the function name in column 1
> (with the return type in previous line) - I actually like this style.
>
> > @@ -1266,10 +1281,23 @@ virDomainEventStateQueue(virDomainEventStatePtr state,
> > virDomainEventStateUnlock(state);
> > }
> >
> > -void
> > -virDomainEventStateFlush(virDomainEventStatePtr state,
> > - virDomainEventDispatchFunc dispatchFunc,
> > - void *opaque)
> > +
> > +static void virDomainEventStateDispatchFunc(virConnectPtr conn,
>
> ...but here's a case where the diff makes it look at first glance like
> you converted in the opposite direction. A closer look shows that you
> kept the layout of virDomainEventStateFlush intact, but added a new
> function, with the new function not using consistent layout, but it
> would still be worth consistent layout here.
>
> > @@ -952,11 +928,7 @@ libxlStartup(int privileged) {
> > }
> > VIR_FREE(log_file);
> >
> > - libxl_driver->domainEventState = virDomainEventStateNew(
> > - libxlDomainEventFlush,
> > - libxl_driver,
> > - NULL,
> > - false);
> > + libxl_driver->domainEventState = virDomainEventStateNew(true);
>
> Why the change from false to true?
>
> > @@ -326,10 +325,7 @@ xenUnifiedOpen (virConnectPtr conn, virConnectAuthPtr auth, unsigned int flags)
> > return VIR_DRV_OPEN_ERROR;
> > }
> >
> > - if (!(priv->domainEvents = virDomainEventStateNew(xenDomainEventFlush,
> > - priv,
> > - NULL,
> > - NULL))) {
> > + if (!(priv->domainEvents = virDomainEventStateNew(true))) {
>
> Why the change from false (once you fix my comment in 1/8) to true?
Both these drivers run inside the daemon where the event loop is always
expected to be present, so using 'false' was wrong.
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