summaryrefslogtreecommitdiffstats
path: root/src/corelib
diff options
context:
space:
mode:
Diffstat (limited to 'src/corelib')
-rw-r--r--src/corelib/global/qglobal.cpp34
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