[libvirt] [PATCH 4/5] qemu: implement virConnectListAllDomains() for qemu driver
Daniel P. Berrange
berrange at redhat.com
Thu May 24 12:14:12 UTC 2012
On Thu, May 24, 2012 at 05:46:51AM -0600, Eric Blake wrote:
> On 05/20/2012 09:56 AM, Peter Krempa wrote:
> > This patch adds a basic implementation of the listing code for
> > virConnectListAllDomains() to qemu driver. The listing code does
> > not support any filtering flags yet, but they may be easily added
> > later.
> > ---
> > src/qemu/qemu_driver.c | 97 ++++++++++++++++++++++++++++++++++++++++++++++++
> > 1 files changed, 97 insertions(+), 0 deletions(-)
>
> > +static void
> > +qemuPopulateDomainList(void *payload,
> > + const void *name ATTRIBUTE_UNUSED,
> > + void *opaque)
> > +{
> > + struct virDomainListData *data = opaque;
> > + virDomainObjPtr vm = payload;
> > +
> > + if (data->error ||
> > + (data->limit >= 0 &&
> > + data->ndomains >= data->limit))
> > + return;
> > +
> > + if (!data->populate) {
> > + data->ndomains++;
> > + return;
> > + }
> > +
> > + virDomainObjLock(vm);
>
> I just realized: Since we are executing this under the driver lock, and
> no VM can change state until we let go of the driver lock, it is not
> necessary to lock vms in this loop. That will help things go faster in
> computing the list.
Hmm, this feels slightly dangerous to me. Saying that is in effect saying
you can do reads on a virDomainObjPtr without locking. This would be ok
if it were impossible for the fields we're reading to be changed without
driver lock held.
1. Thread A lock(driver)
2. Thread A lock(vm1)
3. Thread A unlock(driver)
4. Thread B lock(driver)
5. Thread B ...starts getting the list of domains...
Now consider Thread A changes the 'id' feld in a virDomainPtr eg due
to the guest shutting down.
Won't thread B be doing unsafe reads of 'id' now ?
The only way I can see that this is safe, is if we are sure that
every change of the 'name', 'uuid' and 'id' fields is protected
by the driver lock.
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