Subject: RE: pthread_mutex_trylock does not lock
From: Robert Collins <[email-masked]>
To: Christophe Galerne <[email-masked]>
Cc: cygwin <[email-masked]>
Date: 05 Dec 2002 18:51:37 +1100

On Thu, 2002-12-05 at 08:33, Christophe Galerne wrote:

> This
> www.opengroup.org/onlinepubs/7908799/xsh/pthread_mutexattr_settype.html
> seems to explain that a PT_MUTEX_NORMAL mutex should behave the way Chris
> expect.

NB: PT_MUTEX_NORMAL is not a posix mutex type - it's
PTHREAD_MUTEX_NORMAL.... And yes, 'NORMAL' mutexs deadlock on relocking
attempts.

Thomas Pfaff is currently updating the cygwin mutex support - it would
be great to get some user feedback on his patches, and they support
PTHREAD_MUTEX_NORMAL mutex's.

>  > We don't support NONRECURSIVE mutex's. I don't know what you mean by
>  > NORECURSIVE threads.
> 
> Then maybe one should add a comment above
> pthread.h(55): #define PTHREAD_MUTEX_NORMAL 2
> that this option is not supported.

Or you could check the return value from pthread_mutexattr_settype and
see that it returns EINVAL.

> Also above
> pthread.h(57): #define PTHREAD_MUTEX_INITIALIZER (void *)20
> a comment that says that a default MUTEX will be recursive
> might avoid some surprise. =:-D

Look at pthread.h:53 and pthread.h:58. DEFAULT is mapped to RECURSIVE as
per the 1003.1 options 'an implementation may map this mutex to one of
the other mutex types'. Thus my initial comment: ASSUMING that
PTHREAD_MUTEX_DEFAULT == PTHREAD_MUTEX_NORMAL is broken code. 

Rob

-- 
---
GPG key available at: http://users.bigpond.net.au/robertc/keys.txt.
---