diff options
author | OBATA Akio <obache@wizdas.com> | 2021-12-27 17:29:50 +0900 |
---|---|---|
committer | OBATA Akio <obache@wizdas.com> | 2021-12-28 16:47:51 +0900 |
commit | 7e4fc64d69e8211cbe6e6fed33998ecab29c873d (patch) | |
tree | dd6cbd74b960d678c97e65d8a451c7e34795821c | |
parent | 1c1b280b1f48e643a73bd3536d1a4ab0237ebdaf (diff) | |
download | tqt3-7e4fc64d69e8211cbe6e6fed33998ecab29c873d.tar.gz tqt3-7e4fc64d69e8211cbe6e6fed33998ecab29c873d.zip |
tools: fix to use `pthread_t` for Thread ID
Thread ID is opaque type pthread_t, it may not be compatible with integer,
and may integer with valid id `0`.
Change to store mutex owner thread ID as `pthread_t` type with valid flag
and compare with `pthread_equal()`,
and don't try to print it.
Signed-off-by: OBATA Akio <obache@wizdas.com>
-rw-r--r-- | src/tools/qmutex_unix.cpp | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/src/tools/qmutex_unix.cpp b/src/tools/qmutex_unix.cpp index 6d1a1423d..dae1533c4 100644 --- a/src/tools/qmutex_unix.cpp +++ b/src/tools/qmutex_unix.cpp @@ -72,7 +72,6 @@ typedef pthread_mutex_t Q_MUTEX_T; #include "qmutex_p.h" #include <errno.h> -#include <stdint.h> #include <string.h> // Private class declarations @@ -106,7 +105,8 @@ public: int level(); int count; - unsigned long owner; + pthread_t owner; + bool is_owned; pthread_mutex_t handle2; }; #endif // !Q_RECURSIVE_MUTEX_TYPE @@ -207,7 +207,7 @@ int TQRealMutexPrivate::level() #ifndef Q_RECURSIVE_MUTEX_TYPE TQRecursiveMutexPrivate::TQRecursiveMutexPrivate() - : count(0), owner(0) + : count(0), is_owned(false) { pthread_mutexattr_t attr; pthread_mutexattr_init(&attr); @@ -244,14 +244,15 @@ void TQRecursiveMutexPrivate::lock() { pthread_mutex_lock(&handle2); - if (count > 0 && owner == (unsigned long) pthread_self()) { + if (count > 0 && pthread_equal(owner, pthread_self()) ) { count++; } else { pthread_mutex_unlock(&handle2); pthread_mutex_lock(&handle); pthread_mutex_lock(&handle2); count = 1; - owner = (unsigned long) pthread_self(); + owner = pthread_self(); + is_owned = true; } pthread_mutex_unlock(&handle2); @@ -261,7 +262,7 @@ void TQRecursiveMutexPrivate::unlock() { pthread_mutex_lock(&handle2); - if (owner == (unsigned long) pthread_self()) { + if ( is_owned && pthread_equal(owner, pthread_self()) ) { // do nothing if the count is already 0... to reflect the behaviour described // in the docs if (count && (--count) < 1) { @@ -271,8 +272,6 @@ void TQRecursiveMutexPrivate::unlock() } else { #ifdef QT_CHECK_RANGE tqWarning("TQMutex::unlock: unlock from different thread than locker"); - tqWarning(" was locked by %d, unlock attempt from %lu", - (int)owner, (uintptr_t)pthread_self()); #endif } @@ -309,7 +308,7 @@ bool TQRecursiveMutexPrivate::trylock() pthread_mutex_lock(&handle2); - if ( count > 0 && owner == (unsigned long) pthread_self() ) { + if ( count > 0 && pthread_equal(owner, pthread_self()) ) { count++; } else { int code = pthread_mutex_trylock(&handle); @@ -323,7 +322,8 @@ bool TQRecursiveMutexPrivate::trylock() ret = FALSE; } else { count = 1; - owner = (unsigned long) pthread_self(); + owner = pthread_self(); + is_owned = true; } } |