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