diff options
author | Ulrich Drepper <drepper@redhat.com> | 2000-03-16 21:27:44 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2000-03-16 21:27:44 +0000 |
commit | 9de74ebf76a58e367d5c028f4d179ff543fe6331 (patch) | |
tree | b622aedc7e377f2ae25baf15ce2539b07fa7ff9f /linuxthreads/mutex.c | |
parent | 5a0ca44d63b05c0e6459238b8c15fd091eaf464e (diff) | |
download | glibc-9de74ebf76a58e367d5c028f4d179ff543fe6331.tar glibc-9de74ebf76a58e367d5c028f4d179ff543fe6331.tar.gz glibc-9de74ebf76a58e367d5c028f4d179ff543fe6331.tar.bz2 glibc-9de74ebf76a58e367d5c028f4d179ff543fe6331.zip |
(__pthread_mutex_lock): Always initialize __m_owner. (__pthread_mutex_trylock): Likewise. (__pthread_mutex_unlock): Always clear __m_owner.
Diffstat (limited to 'linuxthreads/mutex.c')
-rw-r--r-- | linuxthreads/mutex.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/linuxthreads/mutex.c b/linuxthreads/mutex.c index 06d97df03f..81a95ce0c1 100644 --- a/linuxthreads/mutex.c +++ b/linuxthreads/mutex.c @@ -50,6 +50,7 @@ int __pthread_mutex_trylock(pthread_mutex_t * mutex) switch(mutex->__m_kind) { case PTHREAD_MUTEX_FAST_NP: retcode = __pthread_trylock(&mutex->__m_lock); + mutex->__m_owner = thread_self(); return retcode; case PTHREAD_MUTEX_RECURSIVE_NP: self = thread_self(); @@ -77,12 +78,12 @@ strong_alias (__pthread_mutex_trylock, pthread_mutex_trylock) int __pthread_mutex_lock(pthread_mutex_t * mutex) { - pthread_descr self; + pthread_descr self = thread_self(); switch(mutex->__m_kind) { case PTHREAD_MUTEX_FAST_NP: __pthread_lock(&mutex->__m_lock, NULL); - return 0; + break; case PTHREAD_MUTEX_RECURSIVE_NP: self = thread_self(); if (mutex->__m_owner == self) { @@ -90,18 +91,18 @@ int __pthread_mutex_lock(pthread_mutex_t * mutex) return 0; } __pthread_lock(&mutex->__m_lock, self); - mutex->__m_owner = self; mutex->__m_count = 0; - return 0; + break; case PTHREAD_MUTEX_ERRORCHECK_NP: self = thread_self(); if (mutex->__m_owner == self) return EDEADLK; __pthread_lock(&mutex->__m_lock, self); - mutex->__m_owner = self; - return 0; + break; default: return EINVAL; } + mutex->__m_owner = self; + return 0; } strong_alias (__pthread_mutex_lock, pthread_mutex_lock) @@ -110,6 +111,7 @@ int __pthread_mutex_unlock(pthread_mutex_t * mutex) switch (mutex->__m_kind) { case PTHREAD_MUTEX_FAST_NP: __pthread_unlock(&mutex->__m_lock); + mutex->__m_owner = NULL; return 0; case PTHREAD_MUTEX_RECURSIVE_NP: if (mutex->__m_count > 0) { |