summaryrefslogtreecommitdiffstats
path: root/src/corelib/thread/qsemaphore.cpp
diff options
context:
space:
mode:
authorQt Forward Merge Bot <qt_forward_merge_bot@qt-project.org>2018-04-10 01:00:25 +0200
committerQt Forward Merge Bot <qt_forward_merge_bot@qt-project.org>2018-04-10 01:00:26 +0200
commite027c7241f073f5fc8c1db88700cc83635b6454f (patch)
tree69920e408b5eeb1547c0241696cfa845af85e4be /src/corelib/thread/qsemaphore.cpp
parentb2035d38e8dfdfe2ba8da96df5c1174f01dfbb5b (diff)
parent3b85d53913741660473dbc242a48c2ee65d51421 (diff)
Merge remote-tracking branch 'origin/5.11' into dev
Diffstat (limited to 'src/corelib/thread/qsemaphore.cpp')
-rw-r--r--src/corelib/thread/qsemaphore.cpp10
1 files changed, 7 insertions, 3 deletions
diff --git a/src/corelib/thread/qsemaphore.cpp b/src/corelib/thread/qsemaphore.cpp
index 9a5505bd1e..f418ac1205 100644
--- a/src/corelib/thread/qsemaphore.cpp
+++ b/src/corelib/thread/qsemaphore.cpp
@@ -291,10 +291,14 @@ public:
QSemaphore::QSemaphore(int n)
{
Q_ASSERT_X(n >= 0, "QSemaphore", "parameter 'n' must be non-negative");
- if (futexAvailable())
- u.store(n);
- else
+ if (futexAvailable()) {
+ quintptr nn = unsigned(n);
+ if (futexHasWaiterCount)
+ nn |= quint64(nn) << 32; // token count replicated in high word
+ u.store(nn);
+ } else {
d = new QSemaphorePrivate(n);
+ }
}
/*!