summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOBATA Akio <[email protected]>2021-12-27 17:29:50 +0900
committerSlávek Banko <[email protected]>2021-12-29 15:32:16 +0100
commitdc6b2e3d45b166c8aaa9946bfdda23fdc2a7b22b (patch)
tree34e77689891c0c974cf6c73a6876a00531e6c5d0
parent96f244b00ce96c7b60c63754563f4c257efb9ea4 (diff)
downloadtqt3-dc6b2e3d45b166c8aaa9946bfdda23fdc2a7b22b.tar.gz
tqt3-dc6b2e3d45b166c8aaa9946bfdda23fdc2a7b22b.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 <[email protected]> (cherry picked from commit 7e4fc64d69e8211cbe6e6fed33998ecab29c873d)
-rw-r--r--src/tools/qmutex_unix.cpp20
1 files changed, 10 insertions, 10 deletions
diff --git a/src/tools/qmutex_unix.cpp b/src/tools/qmutex_unix.cpp
index ac466fd88..fcfa31b69 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;
}
}