2014-07-13 Yaakov Selkowitz * thread.cc (pthread_mutex::pthread_mutex): Change default type to PTHREAD_MUTEX_NORMAL. (pthread_mutexattr::pthread_mutexattr): Ditto. (pthread_mutex_unlock): Do not fail if mutex is a normal mutex initializer. * include/pthread.h (PTHREAD_MUTEX_INITIALIZER): Redefine as PTHREAD_NORMAL_MUTEX_INITIALIZER_NP. Index: thread.cc =================================================================== RCS file: /cvs/src/src/winsup/cygwin/thread.cc,v retrieving revision 1.287 diff -u -p -r1.287 thread.cc --- thread.cc 1 Dec 2013 10:27:16 -0000 1.287 +++ thread.cc 26 Mar 2014 04:24:08 -0000 @@ -1708,7 +1708,7 @@ pthread_mutex::pthread_mutex (pthread_mu tid (0), #endif recursion_counter (0), condwaits (0), - type (PTHREAD_MUTEX_ERRORCHECK), + type (PTHREAD_MUTEX_NORMAL), pshared (PTHREAD_PROCESS_PRIVATE) { win32_obj_id = ::CreateEvent (&sec_none_nih, false, false, NULL); @@ -1850,7 +1850,7 @@ pthread_mutex::_fixup_after_fork () } pthread_mutexattr::pthread_mutexattr ():verifyable_object (PTHREAD_MUTEXATTR_MAGIC), -pshared (PTHREAD_PROCESS_PRIVATE), mutextype (PTHREAD_MUTEX_ERRORCHECK) +pshared (PTHREAD_PROCESS_PRIVATE), mutextype (PTHREAD_MUTEX_NORMAL) { } @@ -3158,7 +3158,7 @@ extern "C" int pthread_mutex_unlock (pthread_mutex_t *mutex) { if (pthread_mutex::is_initializer (mutex)) - return EPERM; + pthread_mutex::init (mutex, NULL, *mutex); if (!pthread_mutex::is_good_object (mutex)) return EINVAL; return (*mutex)->unlock (); Index: include/pthread.h =================================================================== RCS file: /cvs/src/src/winsup/cygwin/include/pthread.h,v retrieving revision 1.39 diff -u -p -r1.39 pthread.h --- include/pthread.h 26 Feb 2013 10:32:36 -0000 1.39 +++ include/pthread.h 26 Mar 2014 04:24:08 -0000 @@ -49,7 +49,7 @@ extern "C" #define PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP (pthread_mutex_t)18 #define PTHREAD_NORMAL_MUTEX_INITIALIZER_NP (pthread_mutex_t)19 #define PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP (pthread_mutex_t)20 -#define PTHREAD_MUTEX_INITIALIZER PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP +#define PTHREAD_MUTEX_INITIALIZER PTHREAD_NORMAL_MUTEX_INITIALIZER_NP #define PTHREAD_ONCE_INIT { PTHREAD_MUTEX_INITIALIZER, 0 } #if defined(_POSIX_THREAD_PRIO_INHERIT) && _POSIX_THREAD_PRIO_INHERIT >= 0 #define PTHREAD_PRIO_NONE 0