summaryrefslogtreecommitdiffstats
path: root/src/corelib/plugin
diff options
context:
space:
mode:
Diffstat (limited to 'src/corelib/plugin')
-rw-r--r--src/corelib/plugin/quuid.cpp13
1 files changed, 9 insertions, 4 deletions
diff --git a/src/corelib/plugin/quuid.cpp b/src/corelib/plugin/quuid.cpp
index 7224ad3..3c79653 100644
--- a/src/corelib/plugin/quuid.cpp
+++ b/src/corelib/plugin/quuid.cpp
@@ -548,9 +548,11 @@ bool QUuid::operator>(const QUuid &other) const
On any platform other than Windows, this function returns a new
UUID with variant QUuid::DCE and version QUuid::Random. The random
numbers used to construct the UUID are obtained from the local
- pseudo-random generator, which is usually not a cryptographic
+ pseudo-random generator, qrand(), which is usually not a cryptographic
quality random number generator. Therefore, a UUID generated by
- this function can't be guaranteed to be unique.
+ this function can't be guaranteed to be unique. If the pseudo-random
+ number generator for the calling thread has not yet been seeded, this
+ function will seed the pseudo-random number generator by calling qsrand().
On a Windows platform, a GUID is generated, which almost certainly
\e{will} be unique, on this or any other system, networked or not.
@@ -578,6 +580,8 @@ QT_BEGIN_INCLUDE_NAMESPACE
#include "stdlib.h" // For srand/rand
QT_END_INCLUDE_NAMESPACE
+extern void qsrand(); // in qglobal.cpp
+
QUuid QUuid::createUuid()
{
static const int intbits = sizeof(int)*8;
@@ -585,10 +589,11 @@ QUuid QUuid::createUuid()
if (!randbits) {
int max = RAND_MAX;
do { ++randbits; } while ((max=max>>1));
- qsrand((uint)QDateTime::currentDateTime().toTime_t());
- qrand(); // Skip first
}
+ // reseed, but only if not already seeded
+ qsrand();
+
QUuid result;
uint *data = &(result.data1);
int chunks = 16 / sizeof(uint);