diff options
author | Neal H. Walfield <neal@gnu.org> | 2008-10-02 12:00:44 +0000 |
---|---|---|
committer | Thomas Schwinge <tschwinge@gnu.org> | 2009-04-08 00:03:40 +0200 |
commit | 1fcd93fd3c733eb19bcad8d03e65f13ec4b0e998 (patch) | |
tree | c158df24286570663f245d24db4cca4b25a647f1 | |
parent | 604deeca6b23263cc608e2db3b28d5e0ef55aa16 (diff) |
2008-10-02 Neal H. Walfield <neal@gnu.org>
* sysdeps/generic/pt-mutex-timedlock.c
(__pthread_mutex_timedlock_internal) [! ALWAYS_TRACK_MUTEX_OWNER]:
Don't update MUTEX->OWNER or assert MUTEX->OWNER for normal
mutexes.
* sysdeps/generic/pt-mutex-unlock.c (__pthread_mutex_unlock)
[! ALWAYS_TRACK_MUTEX_OWNER]: Don't update MUTEX->OWNER or assert
MUTEX->OWNER for normal mutexes.
* sysdeps/generic/pt-mutex-transfer-np.c
(__pthread_mutex_transfer_np) [! ALWAYS_TRACK_MUTEX_OWNER]: Don't
update MUTEX->OWNER for normal mutexes.
-rw-r--r-- | ChangeLog | 13 | ||||
-rw-r--r-- | sysdeps/generic/pt-mutex-timedlock.c | 28 | ||||
-rw-r--r-- | sysdeps/generic/pt-mutex-transfer-np.c | 7 | ||||
-rw-r--r-- | sysdeps/generic/pt-mutex-unlock.c | 11 |
4 files changed, 46 insertions, 13 deletions
@@ -1,3 +1,16 @@ +2008-10-02 Neal H. Walfield <neal@gnu.org> + + * sysdeps/generic/pt-mutex-timedlock.c + (__pthread_mutex_timedlock_internal) [! ALWAYS_TRACK_MUTEX_OWNER]: + Don't update MUTEX->OWNER or assert MUTEX->OWNER for normal + mutexes. + * sysdeps/generic/pt-mutex-unlock.c (__pthread_mutex_unlock) + [! ALWAYS_TRACK_MUTEX_OWNER]: Don't update MUTEX->OWNER or assert + MUTEX->OWNER for normal mutexes. + * sysdeps/generic/pt-mutex-transfer-np.c + (__pthread_mutex_transfer_np) [! ALWAYS_TRACK_MUTEX_OWNER]: Don't + update MUTEX->OWNER for normal mutexes. + 2008-08-27 Neal H. Walfield <neal@gnu.org> * pthread/cthreads-compat.c: Don't include <cthreads.h>. diff --git a/sysdeps/generic/pt-mutex-timedlock.c b/sysdeps/generic/pt-mutex-timedlock.c index 265a453..ee43219 100644 --- a/sysdeps/generic/pt-mutex-timedlock.c +++ b/sysdeps/generic/pt-mutex-timedlock.c @@ -36,6 +36,7 @@ __pthread_mutex_timedlock_internal (struct __pthread_mutex *mutex, if (__pthread_spin_trylock (&mutex->__held) == 0) /* Successfully acquired the lock. */ { +#ifdef ALWAYS_TRACK_MUTEX_OWNER #ifndef NDEBUG self = _pthread_self (); if (self) @@ -47,6 +48,7 @@ __pthread_mutex_timedlock_internal (struct __pthread_mutex *mutex, mutex->owner = _pthread_self (); } #endif +#endif if (mutex->attr) switch (mutex->attr->mutex_type) @@ -73,14 +75,16 @@ __pthread_mutex_timedlock_internal (struct __pthread_mutex *mutex, self = _pthread_self (); assert (self); - if (mutex->attr) + if (! mutex->attr || mutex->attr->mutex_type == PTHREAD_MUTEX_NORMAL) + { +#if defined(ALWAYS_TRACK_MUTEX_OWNER) + assert (mutex->owner != self); +#endif + } + else { switch (mutex->attr->mutex_type) { - case PTHREAD_MUTEX_NORMAL: - assert (mutex->owner != self); - break; - case PTHREAD_MUTEX_ERRORCHECK: if (mutex->owner == self) { @@ -102,10 +106,11 @@ __pthread_mutex_timedlock_internal (struct __pthread_mutex *mutex, LOSE; } } - else - assert (mutex->owner != self); - assert (mutex->owner); +#if !defined(ALWAYS_TRACK_MUTEX_OWNER) + if (mutex->attr && mutex->attr->mutex_type != PTHREAD_MUTEX_NORMAL) +#endif + assert (mutex->owner); if (abstime && (abstime->tv_nsec < 0 || abstime->tv_nsec >= 1000000000)) return EINVAL; @@ -141,9 +146,12 @@ __pthread_mutex_timedlock_internal (struct __pthread_mutex *mutex, else __pthread_block (self); -#ifndef NDEBUG - assert (mutex->owner == self); +#if !defined(ALWAYS_TRACK_MUTEX_OWNER) + if (mutex->attr && mutex->attr->mutex_type != PTHREAD_MUTEX_NORMAL) #endif + { + assert (mutex->owner == self); + } if (mutex->attr) switch (mutex->attr->mutex_type) diff --git a/sysdeps/generic/pt-mutex-transfer-np.c b/sysdeps/generic/pt-mutex-transfer-np.c index bcb809d..7796ac4 100644 --- a/sysdeps/generic/pt-mutex-transfer-np.c +++ b/sysdeps/generic/pt-mutex-transfer-np.c @@ -45,7 +45,12 @@ __pthread_mutex_transfer_np (struct __pthread_mutex *mutex, pthread_t tid) } #ifndef NDEBUG - mutex->owner = thread; +# if !defined(ALWAYS_TRACK_MUTEX_OWNER) + if (mutex->attr && mutex->attr->mutex_type != PTHREAD_MUTEX_NORMAL) +# endif + { + mutex->owner = thread; + } #endif return 0; diff --git a/sysdeps/generic/pt-mutex-unlock.c b/sysdeps/generic/pt-mutex-unlock.c index 492dfcb..7645fd4 100644 --- a/sysdeps/generic/pt-mutex-unlock.c +++ b/sysdeps/generic/pt-mutex-unlock.c @@ -33,13 +33,15 @@ __pthread_mutex_unlock (pthread_mutex_t *mutex) if (! mutex->attr || mutex->attr->mutex_type == PTHREAD_MUTEX_NORMAL) { -#ifndef NDEBUG +#if defined(ALWAYS_TRACK_MUTEX_OWNER) +# ifndef NDEBUG if (_pthread_self ()) { assert (mutex->owner); assert (mutex->owner == _pthread_self ()); mutex->owner = NULL; } +# endif #endif } else @@ -79,7 +81,12 @@ __pthread_mutex_unlock (pthread_mutex_t *mutex) __pthread_dequeue (wakeup); #ifndef NDEBUG - mutex->owner = wakeup; +# if !defined (ALWAYS_TRACK_MUTEX_OWNER) + if (mutex->attr && mutex->attr->mutex_type != PTHREAD_MUTEX_NORMAL) +# endif + { + mutex->owner = wakeup; + } #endif /* We do not unlock MUTEX->held: we are transferring the ownership |