about summary refs log tree commit diff
path: root/nptl/pthread_mutex_unlock.c
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2003-05-01 23:19:51 +0000
committerUlrich Drepper <drepper@redhat.com>2003-05-01 23:19:51 +0000
commit9a7178d611c8a9b2089cbd8288b623ec3e86da3f (patch)
treeb33e5f3f63e777a1939eebcf23ee7351043861a8 /nptl/pthread_mutex_unlock.c
parentcf20f569ae3e9c1893a45b58f5181ed336ca1c4d (diff)
downloadglibc-9a7178d611c8a9b2089cbd8288b623ec3e86da3f.tar.gz
glibc-9a7178d611c8a9b2089cbd8288b623ec3e86da3f.tar.xz
glibc-9a7178d611c8a9b2089cbd8288b623ec3e86da3f.zip
Update.
2003-05-01  Ulrich Drepper  <drepper@redhat.com>

	* sysdeps/i386/tls.h: Define THREAD_ID.
	* sysdeps/ia64/tls.h: Likewise.
	* sysdeps/powerpc/tls.h: Likewise.
	* sysdeps/s390/tls.h: Likewise.
	* sysdeps/sh/tls.h: Likewise.
	* sysdeps/x86_64/tls.h: Likewise.
	* pthread_mutex_lock.c: Use THREAD_ID instead of THREAD_SELF to
	record ownership.
	* pthread_mutex_timedlock.c: Likewise.
	* pthread_mutex_trylock.c: Likewise.
	* pthread_mutex_unlock.c: Likewise.
	* pthread_rwlock_trywrlock.c: Likewise.
	* sysdeps/pthread/pthread_rwlocklock_rdlock.c: Likewise.
	* sysdeps/pthread/pthread_rwlock_timedrdlock.c: Likewise.
	* sysdeps/pthread/pthread_rwlock_timedwrlock.c: Likewise.
	* sysdeps/pthread/pthread_rwlock_wrlock.c: Likewise.

	* sysdeps/pthread/createthread.c (create_thread): Use CLONE_SYSVSEM
	flag.
Diffstat (limited to 'nptl/pthread_mutex_unlock.c')
-rw-r--r--nptl/pthread_mutex_unlock.c11
1 files changed, 5 insertions, 6 deletions
diff --git a/nptl/pthread_mutex_unlock.c b/nptl/pthread_mutex_unlock.c
index 3595585a84..975127d2b2 100644
--- a/nptl/pthread_mutex_unlock.c
+++ b/nptl/pthread_mutex_unlock.c
@@ -30,23 +30,19 @@ __pthread_mutex_unlock (mutex)
     {
     case PTHREAD_MUTEX_RECURSIVE_NP:
       /* Recursive mutex.  */
-      if (mutex->__data.__owner != THREAD_SELF)
+      if (mutex->__data.__owner != THREAD_ID)
 	return EPERM;
 
       if (--mutex->__data.__count != 0)
 	/* We still hold the mutex.  */
 	return 0;
-
-      mutex->__data.__owner = NULL;
       break;
 
     case PTHREAD_MUTEX_ERRORCHECK_NP:
       /* Error checking mutex.  */
-      if (mutex->__data.__owner != THREAD_SELF
+      if (mutex->__data.__owner != THREAD_ID
 	  || ! lll_mutex_islocked (mutex->__data.__lock))
 	return EPERM;
-
-      mutex->__data.__owner = NULL;
       break;
 
     default:
@@ -57,6 +53,9 @@ __pthread_mutex_unlock (mutex)
       break;
     }
 
+  /* Always reset the owner field.  */
+  mutex->__data.__owner = NULL;
+
   /* Unlock.  */
   lll_mutex_unlock (mutex->__data.__lock);