[libvirt] PATCH: 9/25: Make global error object thread local
Richard W.M. Jones
rjones at redhat.com
Thu Jan 15 17:12:44 UTC 2009
On Tue, Jan 13, 2009 at 05:42:15PM +0000, Daniel P. Berrange 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.
>
>
> src/datatypes.c | 31
> src/datatypes.h | 15
> src/libvirt.c | 3276 ++++++++++++++++++++++++++++++++---------------
> src/virterror.c | 258 +++
> src/virterror_internal.h | 5
> tests/cpuset | 2
> tests/read-bufsiz | 2
> tests/start | 4
> tests/undefine | 8
> tests/vcpupin | 4
> 10 files changed, 2507 insertions(+), 1098 deletions(-)
Yup, looks good, and also fixes lots of potential bugs where the
connection object might have been corrupted. +1.
Rich.
--
Richard Jones, Emerging Technologies, Red Hat http://et.redhat.com/~rjones
virt-p2v converts physical machines to virtual machines. Boot with a
live CD or over the network (PXE) and turn machines into Xen guests.
http://et.redhat.com/~rjones/virt-p2v
More information about the libvir-list
mailing list