On Fri, Oct 23, 2009 at 02:05:31PM +0100, Daniel P. Berrange wrote: > This implements a thin wrapper around the pthread_rwlock > primitives. No impl is provided for Win32 at this time > since it is rather hard, and none of our code yet requires > it on Win32 > > * src/util/threads.h: Add virRWLockInit, virRWLockDestroy, > virRWLockRead, virRWLockWrite, virRWLockUnlock APIs > * src/util/threads-pthread.h: define virRWLock struct > * src/util/threads-pthread.c: Implement RWLock APIs > --- > src/libvirt_private.syms | 6 ++++++ > src/util/threads-pthread.c | 30 ++++++++++++++++++++++++++++++ > src/util/threads-pthread.h | 4 ++++ > src/util/threads.h | 10 ++++++++++ > 4 files changed, 50 insertions(+), 0 deletions(-) > > diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms > index bd9d84a..6ed562d 100644 > --- a/src/libvirt_private.syms > +++ b/src/libvirt_private.syms > @@ -426,6 +426,12 @@ virCondWait; > virCondSignal; > virCondBroadcast; > > +virRWLockInit; > +virRWLockDestroy; > +virRWLockRead; > +virRWLockWrite; > +virRWLockUnlock; > + > # util.h > virFileReadAll; > virFileWriteStr; > diff --git a/src/util/threads-pthread.c b/src/util/threads-pthread.c > index 4e00bc5..2052c0a 100644 > --- a/src/util/threads-pthread.c > +++ b/src/util/threads-pthread.c > @@ -57,6 +57,36 @@ void virMutexUnlock(virMutexPtr m) > } > > > +int virRWLockInit(virRWLockPtr m) > +{ > + if (pthread_rwlock_init(&m->lock, NULL) != 0) { > + errno = EINVAL; > + return -1; > + } > + return 0; > +} > + > +void virRWLockDestroy(virRWLockPtr m) > +{ > + pthread_rwlock_destroy(&m->lock); > +} > + > +void virRWLockRead(virRWLockPtr m) > +{ > + pthread_rwlock_rdlock(&m->lock); > +} > + > +void virRWLockWrite(virRWLockPtr m) > +{ > + pthread_rwlock_wrlock(&m->lock); > +} > + > +void virRWLockUnlock(virRWLockPtr m) > +{ > + pthread_rwlock_unlock(&m->lock); > +} > + > + Hum it's a small patch, but I would rather fix those function to not be void when the underlying pthread_ counterpart can actually fail. IMHO we should report errors coming from the thread library (whichever is used on a given platform). Daniel -- Daniel Veillard | libxml Gnome XML XSLT toolkit http://xmlsoft.org/ daniel@xxxxxxxxxxxx | Rpmfind RPM search engine http://rpmfind.net/ http://veillard.com/ | virtualization library http://libvirt.org/ -- Libvir-list mailing list Libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list