Revert "Fix deadlock when setting environment variables."
This reverts commit 5b62a5e7aa
.
This commit is reverted due to two reasons:
1) It was written incorrectly and does not work as is. The
ifdefs should be ifndefs. In its current state, it does
the exact opposite of what it is supposed to be doing.
2) There is another environment access inside qsimd.cpp
(which checks QT_NO_CPU_FEATURE). This access causes the
app to hang.
All in all that approach is not sustainable as we might get
bitten by environment access again and again. Instead we should
use another environment container or use a recursive mutex for
WinRT and Windows CE.
Task-number: QTBUG-49529
Change-Id: Iaca76404dc1023551a7c25489a609681135765fd
Reviewed-by: Andrew Knight <andrew.knight@intopalo.com>
Reviewed-by: Samuel Nevala <samuel.nevala@intopalo.com>
This commit is contained in:
parent
bb5570082e
commit
c7251e7dcd
@ -38,14 +38,6 @@
|
|||||||
#ifndef _CRT_RAND_S
|
#ifndef _CRT_RAND_S
|
||||||
#define _CRT_RAND_S
|
#define _CRT_RAND_S
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Windows Runtime and CE use a QHash to fake environment variables. To avoid
|
|
||||||
// deadlock, disable reading the QT_HASH_SEED environment variable within
|
|
||||||
// QHash.
|
|
||||||
#if defined(Q_OS_WINRT) || defined(Q_OS_WINCE)
|
|
||||||
# define QHASH_NO_ENV_SEED
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
#include "qhash.h"
|
#include "qhash.h"
|
||||||
@ -231,11 +223,9 @@ static uint qt_create_qhash_seed()
|
|||||||
uint seed = 0;
|
uint seed = 0;
|
||||||
|
|
||||||
#ifndef QT_BOOTSTRAPPED
|
#ifndef QT_BOOTSTRAPPED
|
||||||
#ifdef QHASH_NO_ENV_SEED
|
|
||||||
QByteArray envSeed = qgetenv("QT_HASH_SEED");
|
QByteArray envSeed = qgetenv("QT_HASH_SEED");
|
||||||
if (!envSeed.isNull())
|
if (!envSeed.isNull())
|
||||||
return envSeed.toUInt();
|
return envSeed.toUInt();
|
||||||
#endif // QHASH_NO_ENV_SEED
|
|
||||||
|
|
||||||
#ifdef Q_OS_UNIX
|
#ifdef Q_OS_UNIX
|
||||||
int randomfd = qt_safe_open("/dev/urandom", O_RDONLY);
|
int randomfd = qt_safe_open("/dev/urandom", O_RDONLY);
|
||||||
@ -337,10 +327,8 @@ int qGlobalQHashSeed()
|
|||||||
*/
|
*/
|
||||||
void qSetGlobalQHashSeed(int newSeed)
|
void qSetGlobalQHashSeed(int newSeed)
|
||||||
{
|
{
|
||||||
#ifdef QHASH_NO_ENV_SEED
|
|
||||||
if (qEnvironmentVariableIsSet("QT_HASH_SEED"))
|
if (qEnvironmentVariableIsSet("QT_HASH_SEED"))
|
||||||
return;
|
return;
|
||||||
#endif // QHASH_NO_ENV_SEED
|
|
||||||
if (newSeed == -1) {
|
if (newSeed == -1) {
|
||||||
int x(qt_create_qhash_seed() & INT_MAX);
|
int x(qt_create_qhash_seed() & INT_MAX);
|
||||||
qt_qhash_seed.store(x);
|
qt_qhash_seed.store(x);
|
||||||
@ -1194,9 +1182,6 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
|
|||||||
decimal value, will be used as the seed for qHash(). Alternatively, you can
|
decimal value, will be used as the seed for qHash(). Alternatively, you can
|
||||||
call the qSetGlobalQHashSeed() function.
|
call the qSetGlobalQHashSeed() function.
|
||||||
|
|
||||||
\note The environment variable \c QT_HASH_SEED is unsupported on Windows
|
|
||||||
Runtime and CE. Use qSetGlobalQHashSeed() instead on those platforms.
|
|
||||||
|
|
||||||
\sa QHashIterator, QMutableHashIterator, QMap, QSet
|
\sa QHashIterator, QMutableHashIterator, QMap, QSet
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user