Re: [PATCH v2] Make xmalloc and xrealloc thread-safe
- From
Nicolas Pitre <nico@fluxnic.net>
- Date
- Apr 7, 2010, 15:08 UTC
- Message-ID
- <alpine.LFD.2.00.1004071103341.7232@xanadu.home>
- In-Reply-To
- <20100407144555.GA23911@fredrik-laptop>
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. >
[...]
Show 7 quoted lines
> 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?
Show 25 quoted lines
> #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