aboutsummaryrefslogtreecommitdiff
path: root/linuxthreads/mutex.c
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2000-03-16 21:27:44 +0000
committerUlrich Drepper <drepper@redhat.com>2000-03-16 21:27:44 +0000
commit9de74ebf76a58e367d5c028f4d179ff543fe6331 (patch)
treeb622aedc7e377f2ae25baf15ce2539b07fa7ff9f /linuxthreads/mutex.c
parent5a0ca44d63b05c0e6459238b8c15fd091eaf464e (diff)
downloadglibc-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.c14
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) {