From 1fcd93fd3c733eb19bcad8d03e65f13ec4b0e998 Mon Sep 17 00:00:00 2001 From: "Neal H. Walfield" Date: Thu, 2 Oct 2008 12:00:44 +0000 Subject: 2008-10-02 Neal H. Walfield * 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. --- sysdeps/generic/pt-mutex-timedlock.c | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) (limited to 'sysdeps/generic/pt-mutex-timedlock.c') 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) @@ -46,6 +47,7 @@ __pthread_mutex_timedlock_internal (struct __pthread_mutex *mutex, assert (! mutex->owner); mutex->owner = _pthread_self (); } +#endif #endif if (mutex->attr) @@ -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) -- cgit v1.2.3