On Wed, 7 Apr 2010, Fredrik Kuivinen wrote: > As I mentioned in another mail in this thread, our mutex > implementation on WIN32 already is recursive. It is implemented on top > of the CRITICAL_SECTION type, which is recursive. See > http://msdn.microsoft.com/en-us/library/ms682530%28VS.85%29.aspx Ahhhh. Goodie. > We only need something like the following (on top of Nico's previous > patch). Warning: It hasn't even been compile tested on WIN32. > [...] > diff --git a/thread-utils.c b/thread-utils.c > index 4f9c829..3c8d817 100644 > --- a/thread-utils.c > +++ b/thread-utils.c > @@ -1,4 +1,5 @@ > #include "cache.h" > +#include <pthread.h> This will fail compilation on Windows surely? > #if defined(hpux) || defined(__hpux) || defined(_hpux) > # include <sys/pstat.h> > @@ -43,3 +44,24 @@ int online_cpus(void) > > return 1; > } > + > +int init_recursive_mutex(pthread_mutex_t *m) > +{ > +#ifdef _WIN32 > + /* The mutexes in the WIN32 pthreads emulation layer are > + * recursive, so we don't have to do anything extra here. */ > + return pthread_mutex_init(m, NULL); > +#else > + pthread_mutexattr_t a; > + int ret; > + if (pthread_mutexattr_init(&a)) > + die("pthread_mutexattr_init failed: %s", strerror(errno)); > + > + if (pthread_mutexattr_settype(&a, PTHREAD_MUTEX_RECURSIVE)) > + die("pthread_mutexattr_settype failed: %s", strerror(errno)); > + > + ret = pthread_mutex_init(m, &a); > + pthread_mutexattr_destroy(&a); > + return ret; Are you sure the pthread_mutexattr_t object can be destroyed even if the mutex is still in use? Is the attribute object "attached" to the mutex or merely used as a template? Nicolas -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html