[libvirt] [PATCH] virsh: Correctly initialize libvirt
Daniel P. Berrange
berrange at redhat.com
Tue May 10 09:53:40 UTC 2011
On Mon, May 09, 2011 at 04:04:41PM +0200, Matthias Bolte wrote:
> 2011/5/9 Jiri Denemark <jdenemar at redhat.com>:
> > virsh didn't call virInitialize(), which (among other things)
> > initializes virLastErr thread local variable. As a result of that, virsh
> > could just segfault in virEventRegisterDefaultImpl() since that is the
> > first call that touches (resets) virLastErr.
> >
> > I have no idea what lucky coincidence made this bug visible but I was
> > able to reproduce it in 100% cases but only in one specific environment
> > which included building in sandbox.
>
> Well, actually all public API that can be called as the first public
> API function ever called in a sound program calls virInitialize first
> internally. For example virConnectOpen. The documentation of
> virInitialize suggest to call it first, but doesn't require it.
>
> A fix in line with the current behavior would be to make
> virEventRegisterDefaultImpl and virEventRunDefaultImpl call
> virInitialize first too.
Yep that's good.
>
> But this doesn't fix another problem, a program could call
> virDomainFree(NULL) for some reason as the first public API call ever
> made in the process and libvirt would try to report an error but would
> segfault because of calling virResetLastError before virInitialize was
> called.
IMHO that would be a mis-use of the API because they should call
virInitialize.
> So you found a much bigger problem and I'm not sure about the correct
> general solution. We could make calling virInitialize first mandatory
> but that might break existing applications. Or we make all public API
> functions call virInitialize first.
I think we could just clarify the docs
"Calling virInitialize is mandatory, unless your
first API call is one of
virConnectOpen*
virEventRegisterDefaultImpl"
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