Allow QHash randomization to be disabled by environment variable
authoraavit <qt_aavit@ovi.com>
Tue, 22 May 2012 08:59:17 +0000 (10:59 +0200)
committerQt by Nokia <qt-info@nokia.com>
Wed, 23 May 2012 12:21:47 +0000 (14:21 +0200)
The new randomization of QHash is enabled by default. There may be cases
where you need deterministic behavior, e.g. for debugging or regression
testing. This patch disables randomization if QT_HASH_SEED is defined.

Change-Id: Idfad55ea7aba830add0a36334f0f763c62fdce13
Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
src/corelib/tools/qhash.cpp

index 3172014..cc8f5be 100644 (file)
@@ -158,6 +158,10 @@ uint qHash(const QLatin1String &key, uint seed)
 */
 static uint qt_create_qhash_seed()
 {
+    QByteArray envSeed = qgetenv("QT_HASH_SEED");
+    if (!envSeed.isNull())
+        return envSeed.toUInt();
+
     uint seed = 0;
 
 #ifdef Q_OS_UNIX
@@ -866,6 +870,13 @@ void QHashData::checkSanity()
     process, and then passed by QHash as the second argument of the
     two-arguments overload of the qHash() function.
 
+    This randomization of QHash is enabled by default. Even though programs
+    should never depend on a particular QHash ordering, there may be situations
+    where you temporarily need deterministic behavior, e.g. for debugging or
+    regression testing. To disable the randomization, define the environment
+    variable \c QT_HASH_SEED. The contents of that variable, interpreted as a
+    decimal value, will be used as the seed for qHash().
+
     \sa QHashIterator, QMutableHashIterator, QMap, QSet
 */