[libvirt] PATCH: 9/25: Make global error object thread local
Daniel P. Berrange
berrange at redhat.com
Tue Jan 20 12:37:15 UTC 2009
On Fri, Jan 16, 2009 at 10:01:01PM +0100, Jim Meyering wrote:
> "Daniel P. Berrange" <berrange at redhat.com> wrote:
> > The virGetLastError() and virConnGetLastError() methods are not
> > even remotely thread safe, and the virCopyLastError/virConnCopyLastError
> > methods don't help in this goal, being open to a race condition.
> >
> > This patch changes the internal impl of the global error object to
> > store its virError instance in a thread local variable. All errors
> > are now reported against the global error object. In the public
> > API entry points, we explicitly reset the global error object to
> > ensure no stale errors are hanging around. In all error paths we
> > also set a generic error, if the internal driver forget to set an
> > explicit error. Finally we also copy the global error to the per
> > connection error object for back-compatability, though the global
> > object remains non-threadsafe for application access.
>
>
> ACK.
This is applied now.
> -----------------------------------------
> However, I did notice one tiny problem:
> There are many uses of TODO, like this:
>
> - if (domain == NULL) {
> - TODO
> - return (-1);
> - }
> + virResetLastError();
>
> Obviously not a compile-time problem, since it's defined to nothing,
> but with no following semicolon, it would cause automatic indenting
> tools to do the wrong thing.
We should probably just remove the remaining TODO blocks - they're not
really doing much useful at this point.
Daniel
--
|: Red Hat, Engineering, London -o- http://people.redhat.com/berrange/ :|
|: http://libvirt.org -o- http://virt-manager.org -o- http://ovirt.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|
More information about the libvir-list
mailing list