diff options
Diffstat (limited to 'src/corelib/global')
-rw-r--r-- | src/corelib/global/qglobal.cpp | 34 |
1 files changed, 20 insertions, 14 deletions
diff --git a/src/corelib/global/qglobal.cpp b/src/corelib/global/qglobal.cpp index 51cf91a77d..ca780346bc 100644 --- a/src/corelib/global/qglobal.cpp +++ b/src/corelib/global/qglobal.cpp @@ -2410,9 +2410,14 @@ void qsrand(uint seed) srand(seed); } #elif defined(Q_OS_ANDROID) - QJNIObjectPrivate random = QJNIObjectPrivate("java/util/Random", - "(J)V", - jlong(seed)); + if (randomTLS->hasLocalData()) { + randomTLS->localData().callMethod<void>("setSeed", "(J)V", jlong(seed)); + return; + } + + QJNIObjectPrivate random("java/util/Random", + "(J)V", + jlong(seed)); if (!random.isValid()) { srand(seed); return; @@ -2465,19 +2470,20 @@ int qrand() if (!randomStorage) return rand(); - QJNIObjectPrivate random; - if (!randomStorage->hasLocalData()) { - random = QJNIObjectPrivate("java/util/Random", - "(J)V", - jlong(1)); - if (!random.isValid()) - return rand(); - - randomStorage->setLocalData(random); - } else { - random = randomStorage->localData(); + if (randomStorage->hasLocalData()) { + return randomStorage->localData().callMethod<jint>("nextInt", + "(I)I", + RAND_MAX); } + QJNIObjectPrivate random("java/util/Random", + "(J)V", + jlong(1)); + + if (!random.isValid()) + return rand(); + + randomStorage->setLocalData(random); return random.callMethod<jint>("nextInt", "(I)I", RAND_MAX); #else // On Windows srand() and rand() already use Thread-Local-Storage |