diff options
author | Shane Kearns <shane.kearns@accenture.com> | 2011-05-31 11:51:05 (GMT) |
---|---|---|
committer | Shane Kearns <shane.kearns@accenture.com> | 2011-05-31 11:51:05 (GMT) |
commit | daba0c0d588c55e3f1591ab8ce0ef0946d1447fd (patch) | |
tree | 9f9e64ee62cc1c758c04874e9c416ceda641b67c | |
parent | 8293336590722f6a92a6b4af401485683b5508fa (diff) | |
download | Qt-daba0c0d588c55e3f1591ab8ce0ef0946d1447fd.zip Qt-daba0c0d588c55e3f1591ab8ce0ef0946d1447fd.tar.gz Qt-daba0c0d588c55e3f1591ab8ce0ef0946d1447fd.tar.bz2 |
Revert "Fix QNetworkConfigurationManager usage outside main thread first"
This reverts commit 5f241ec1426447380b1e938ac7888fb16cde94f8.
Reason for reverting: Some already published applications suffer
from the deadlock behaviour, causing regressions.
Conflicts:
tests/auto/qnetworkconfigurationmanager/tst_qnetworkconfigurationmanager.cpp
3 files changed, 4 insertions, 86 deletions
diff --git a/src/network/bearer/qnetworkconfigmanager_p.cpp b/src/network/bearer/qnetworkconfigmanager_p.cpp index 2391a34..7297b0e 100644 --- a/src/network/bearer/qnetworkconfigmanager_p.cpp +++ b/src/network/bearer/qnetworkconfigmanager_p.cpp @@ -392,6 +392,8 @@ void QNetworkConfigurationManagerPrivate::updateConfigurations() this, SLOT(configurationRemoved(QNetworkConfigurationPrivatePointer))); connect(engine, SIGNAL(configurationChanged(QNetworkConfigurationPrivatePointer)), this, SLOT(configurationChanged(QNetworkConfigurationPrivatePointer))); + + QMetaObject::invokeMethod(engine, "initialize"); } } @@ -421,19 +423,8 @@ void QNetworkConfigurationManagerPrivate::updateConfigurations() startPolling(); } - if (firstUpdate) { + if (firstUpdate) firstUpdate = false; - QList<QBearerEngine*> enginesToInitialize = sessionEngines; //shallow copy the list in case it is modified when we unlock mutex - Qt::ConnectionType connectionType; - if (QCoreApplicationPrivate::mainThread() == QThread::currentThread()) - connectionType = Qt::DirectConnection; - else - connectionType = Qt::BlockingQueuedConnection; - locker.unlock(); - foreach (QBearerEngine* engine, enginesToInitialize) { - QMetaObject::invokeMethod(engine, "initialize", connectionType); - } - } } void QNetworkConfigurationManagerPrivate::performAsyncConfigurationUpdate() diff --git a/tests/auto/qnetworkconfigurationmanager/tst_qnetworkconfigurationmanager.cpp b/tests/auto/qnetworkconfigurationmanager/tst_qnetworkconfigurationmanager.cpp index d29ef77..57bf583 100644 --- a/tests/auto/qnetworkconfigurationmanager/tst_qnetworkconfigurationmanager.cpp +++ b/tests/auto/qnetworkconfigurationmanager/tst_qnetworkconfigurationmanager.cpp @@ -62,7 +62,6 @@ public slots: void cleanup(); private slots: - void usedInThread(); // this test must be first, or it will falsely pass void allConfigurations(); void defaultConfiguration(); void configurationFromIdentifier(); @@ -330,49 +329,6 @@ void tst_QNetworkConfigurationManager::configurationFromIdentifier() QVERIFY(!invalid.isValid()); } -class QNCMTestThread : public QThread -{ -protected: - virtual void run() - { - QNetworkConfigurationManager manager; - preScanConfigs = manager.allConfigurations(); - QSignalSpy spy(&manager, SIGNAL(updateCompleted())); - manager.updateConfigurations(); //initiate scans - QTRY_VERIFY(spy.count() == 1); //wait for scan to complete - configs = manager.allConfigurations(); - } -public: - QList<QNetworkConfiguration> configs; - QList<QNetworkConfiguration> preScanConfigs; -}; - -// regression test for QTBUG-18795 -void tst_QNetworkConfigurationManager::usedInThread() -{ -#if defined Q_OS_MAC && !defined (QT_NO_COREWLAN) - QSKIP("QTBUG-19070 Mac CoreWlan plugin is broken", SkipAll); -#else - QNCMTestThread thread; - connect(&thread, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop())); - thread.start(); - QTestEventLoop::instance().enterLoop(100); //QTRY_VERIFY could take ~90 seconds to time out in the thread - QVERIFY(!QTestEventLoop::instance().timeout()); - qDebug() << "prescan:" << thread.preScanConfigs.count(); - qDebug() << "postscan:" << thread.configs.count(); - - QNetworkConfigurationManager manager; - QList<QNetworkConfiguration> preScanConfigs = manager.allConfigurations(); - QSignalSpy spy(&manager, SIGNAL(updateCompleted())); - manager.updateConfigurations(); //initiate scans - QTRY_VERIFY(spy.count() == 1); //wait for scan to complete - QList<QNetworkConfiguration> configs = manager.allConfigurations(); - QCOMPARE(thread.configs, configs); - //Don't compare pre scan configs, because these may be cached and therefore give different results - //which makes the test unstable. The post scan results should have all configurations every time - //QCOMPARE(thread.preScanConfigs, preScanConfigs); -#endif -} QTEST_MAIN(tst_QNetworkConfigurationManager) #include "tst_qnetworkconfigurationmanager.moc" diff --git a/tests/auto/qnetworkproxyfactory/tst_qnetworkproxyfactory.cpp b/tests/auto/qnetworkproxyfactory/tst_qnetworkproxyfactory.cpp index c56fedb..954b369 100644 --- a/tests/auto/qnetworkproxyfactory/tst_qnetworkproxyfactory.cpp +++ b/tests/auto/qnetworkproxyfactory/tst_qnetworkproxyfactory.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** @@ -41,17 +41,14 @@ #include <QtTest/QTest> -#include <QtTest/QTestEventLoop> #include <qcoreapplication.h> #include <qdebug.h> #include <qnetworkproxy.h> -#include <QThread> class tst_QNetworkProxyFactory : public QObject { Q_OBJECT private slots: - void systemProxyForQueryCalledFromThread(); void systemProxyForQuery() const; private: @@ -99,31 +96,5 @@ void tst_QNetworkProxyFactory::systemProxyForQuery() const QFAIL("One or more system proxy lookup failures occurred."); } -class QSPFQThread : public QThread -{ -protected: - virtual void run() - { - proxies = QNetworkProxyFactory::systemProxyForQuery(query); - } -public: - QNetworkProxyQuery query; - QList<QNetworkProxy> proxies; -}; - -//regression test for QTBUG-18799 -void tst_QNetworkProxyFactory::systemProxyForQueryCalledFromThread() -{ - QUrl url(QLatin1String("http://qt.nokia.com")); - QNetworkProxyQuery query(url); - QSPFQThread thread; - thread.query = query; - connect(&thread, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop())); - thread.start(); - QTestEventLoop::instance().enterLoop(5); - QVERIFY(thread.isFinished()); - QCOMPARE(thread.proxies, QNetworkProxyFactory::systemProxyForQuery(query)); -} - QTEST_MAIN(tst_QNetworkProxyFactory) #include "tst_qnetworkproxyfactory.moc" |