Allow QHash randomization to be disabled by environment variable

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>
This commit is contained in:
aavit 2012-05-22 10:59:17 +02:00 committed by Qt by Nokia
parent f604fd8ff4
commit b5a11a7be5

View File

@ -158,6 +158,10 @@ uint qHash(const QLatin1String &key, uint seed)
*/ */
static uint qt_create_qhash_seed() static uint qt_create_qhash_seed()
{ {
QByteArray envSeed = qgetenv("QT_HASH_SEED");
if (!envSeed.isNull())
return envSeed.toUInt();
uint seed = 0; uint seed = 0;
#ifdef Q_OS_UNIX #ifdef Q_OS_UNIX
@ -866,6 +870,13 @@ void QHashData::checkSanity()
process, and then passed by QHash as the second argument of the process, and then passed by QHash as the second argument of the
two-arguments overload of the qHash() function. 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 \sa QHashIterator, QMutableHashIterator, QMap, QSet
*/ */