diff --git a/src/corelib/platform/android/qandroidextras.cpp b/src/corelib/platform/android/qandroidextras.cpp index 1da8bcf265..d9bcc76a1a 100644 --- a/src/corelib/platform/android/qandroidextras.cpp +++ b/src/corelib/platform/android/qandroidextras.cpp @@ -478,18 +478,19 @@ QJniObject QAndroidServiceConnection::handle() const */ +static QBasicAtomicInteger nextUniqueActivityRequestCode = Q_BASIC_ATOMIC_INITIALIZER(0); // Get a unique activity request code. static int uniqueActivityRequestCode() { - static QMutex mutex; - static int requestCode = 0x1000; // Reserve all request codes under 0x1000 for Qt. + constexpr uint ReservedForQtOffset = 0x1000; // Reserve all request codes under 0x1000 for Qt - QMutexLocker locker(&mutex); - if (requestCode == INT_MAX) + const uint requestCodeBase = nextUniqueActivityRequestCode.fetchAndAddRelaxed(1); + if (requestCodeBase == uint(INT_MAX) - ReservedForQtOffset) qWarning("Unique activity request code has wrapped. Unexpected behavior may occur."); - return requestCode++; + const int requestCode = static_cast(requestCodeBase + ReservedForQtOffset); + return requestCode; } class QAndroidActivityResultReceiverPrivate: public QtAndroidPrivate::ActivityResultListener