Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2014-07-14 13:42:15 +0400
committerCorinna Vinschen <corinna@vinschen.de>2014-07-14 13:42:15 +0400
commit4866e86cb116499c04d6ca2e381d883867879a55 (patch)
tree3269eeed84deb9dea819defe63a935d42b1d2feb /winsup/cygwin/thread.cc
parent87375c75b377633e93e1555b5f05c43f8d767a30 (diff)
* thread.cc (pthread_mutex::pthread_mutex): Change default type
to PTHREAD_MUTEX_NORMAL. (pthread_mutex::unlock): Return EPERM if the mutex has no owner and the mutex type is PTHREAD_MUTEX_ERRORCHECK, as on Linux. (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.
Diffstat (limited to 'winsup/cygwin/thread.cc')
-rw-r--r--winsup/cygwin/thread.cc8
1 files changed, 4 insertions, 4 deletions
diff --git a/winsup/cygwin/thread.cc b/winsup/cygwin/thread.cc
index 0a167fa4d..8fdbf3610 100644
--- a/winsup/cygwin/thread.cc
+++ b/winsup/cygwin/thread.cc
@@ -1709,7 +1709,7 @@ pthread_mutex::pthread_mutex (pthread_mutexattr *attr) :
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);
@@ -1777,7 +1777,7 @@ pthread_mutex::unlock ()
if (type == PTHREAD_MUTEX_NORMAL)
/* no error checking */;
else if (no_owner ())
- res = type == PTHREAD_MUTEX_ERRORCHECK ? EINVAL : 0;
+ res = type == PTHREAD_MUTEX_ERRORCHECK ? EPERM : 0;
else if (!pthread::equal (owner, self))
res = EPERM;
if (!res && recursion_counter > 0 && --recursion_counter == 0)
@@ -1851,7 +1851,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)
{
}
@@ -3159,7 +3159,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 ();