diff options
author | Qt Continuous Integration System <qt-info@nokia.com> | 2011-06-24 21:50:54 (GMT) |
---|---|---|
committer | Qt Continuous Integration System <qt-info@nokia.com> | 2011-06-24 21:50:54 (GMT) |
commit | 36a464681a349a0915f821786b4617695c1d02d4 (patch) | |
tree | 80d85a8d12df15e2dc727a4d584d400b038c6090 /src/network | |
parent | 2463367391803130e9f320cbd129aece5b1b708e (diff) | |
parent | cf2f72f4f61f3a9e0e7573379c33bb341eeba7be (diff) | |
download | Qt-36a464681a349a0915f821786b4617695c1d02d4.zip Qt-36a464681a349a0915f821786b4617695c1d02d4.tar.gz Qt-36a464681a349a0915f821786b4617695c1d02d4.tar.bz2 |
Merge branch 'qt-4.8-from-4.7' of scm.dev.nokia.troll.no:qt/qt-integration into master-integration
* 'qt-4.8-from-4.7' of scm.dev.nokia.troll.no:qt/qt-integration: (28 commits)
Use numeric virtual keyboard for all number entry modes.
QTBUG-17776, reporting terminated threads as not running on Symbian
Splitview - Auto-translation rules changed
Support clipboard function on Symbian
Added qmlshadersplugin to Symbian qt.iby-file.
Workaround webkit deadlock on macos x
Disable antialiasing for tiled image drawing.
Ensure visibility of input widget in QML app when doing layout switch
Def update for gui, openvg, and opengl.
Revert "Def update."
Fix trailing whitespace
Remove unnecessary resizes during orientation change
Revert "Symbian: Fix QFontInfo::pixelSize()"
Improving warning messages in QVolatileImage.
Proper naming for raster pixmap and paintengine on Symbian.
Def update.
Handle QVolatileImage-backed pixmaps optimally in drawPixmap().
Resizable graphicsview's background is drawn incorrectly in splitview
Add inputcontext reset to orientation switch in Symbian
QS60Style: QGroupBox is drawn as white box in upcoming Symbian release
...
Diffstat (limited to 'src/network')
-rw-r--r-- | src/network/bearer/qnetworkconfigmanager.cpp | 4 | ||||
-rw-r--r-- | src/network/bearer/qnetworkconfigmanager_p.cpp | 39 | ||||
-rw-r--r-- | src/network/bearer/qnetworkconfigmanager_p.h | 3 |
3 files changed, 33 insertions, 13 deletions
diff --git a/src/network/bearer/qnetworkconfigmanager.cpp b/src/network/bearer/qnetworkconfigmanager.cpp index 666aba7..fdb36e8 100644 --- a/src/network/bearer/qnetworkconfigmanager.cpp +++ b/src/network/bearer/qnetworkconfigmanager.cpp @@ -56,7 +56,7 @@ QT_BEGIN_NAMESPACE = { Q_BASIC_ATOMIC_INITIALIZER(0), false }; \ static void NAME##_cleanup() \ { \ - delete this_##NAME.pointer; \ + this_##NAME.pointer->cleanup(); \ this_##NAME.pointer = 0; \ } \ static TYPE *NAME() \ @@ -67,7 +67,7 @@ QT_BEGIN_NAMESPACE delete x; \ else { \ qAddPostRoutine(NAME##_cleanup); \ - this_##NAME.pointer->updateConfigurations(); \ + this_##NAME.pointer->initialize(); \ } \ } \ return this_##NAME.pointer; \ diff --git a/src/network/bearer/qnetworkconfigmanager_p.cpp b/src/network/bearer/qnetworkconfigmanager_p.cpp index d468bc4..18e29af 100644 --- a/src/network/bearer/qnetworkconfigmanager_p.cpp +++ b/src/network/bearer/qnetworkconfigmanager_p.cpp @@ -66,11 +66,31 @@ QNetworkConfigurationManagerPrivate::QNetworkConfigurationManagerPrivate() qRegisterMetaType<QNetworkConfigurationPrivatePointer>("QNetworkConfigurationPrivatePointer"); } +void QNetworkConfigurationManagerPrivate::initialize() +{ + //Two stage construction, because we only want to do this heavyweight work for the winner of the Q_GLOBAL_STATIC race. + bearerThread = new QThread(); + bearerThread->moveToThread(QCoreApplicationPrivate::mainThread()); // because cleanup() is called in main thread context. + moveToThread(bearerThread); + bearerThread->start(); + updateConfigurations(); +} + QNetworkConfigurationManagerPrivate::~QNetworkConfigurationManagerPrivate() { QMutexLocker locker(&mutex); qDeleteAll(sessionEngines); + if (bearerThread) + bearerThread->quit(); +} + +void QNetworkConfigurationManagerPrivate::cleanup() +{ + QThread* thread = bearerThread; + deleteLater(); + if(thread->wait(5000)) + delete thread; } QNetworkConfiguration QNetworkConfigurationManagerPrivate::defaultConfiguration() const @@ -350,13 +370,6 @@ void QNetworkConfigurationManagerPrivate::updateConfigurations() if (qobject_cast<QBearerEngine *>(sender())) return; - if (thread() != QCoreApplicationPrivate::mainThread()) { - if (thread() != QThread::currentThread()) - return; - - moveToThread(QCoreApplicationPrivate::mainThread()); - } - updating = false; #ifndef QT_NO_LIBRARY @@ -375,7 +388,7 @@ void QNetworkConfigurationManagerPrivate::updateConfigurations() else sessionEngines.append(engine); - engine->moveToThread(QCoreApplicationPrivate::mainThread()); + engine->moveToThread(bearerThread); connect(engine, SIGNAL(updateCompleted()), this, SLOT(updateConfigurations())); @@ -385,8 +398,6 @@ void QNetworkConfigurationManagerPrivate::updateConfigurations() this, SLOT(configurationRemoved(QNetworkConfigurationPrivatePointer))); connect(engine, SIGNAL(configurationChanged(QNetworkConfigurationPrivatePointer)), this, SLOT(configurationChanged(QNetworkConfigurationPrivatePointer))); - - QMetaObject::invokeMethod(engine, "initialize"); } } @@ -410,8 +421,14 @@ 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 + locker.unlock(); + foreach (QBearerEngine* engine, enginesToInitialize) { + QMetaObject::invokeMethod(engine, "initialize", Qt::BlockingQueuedConnection); + } + } } void QNetworkConfigurationManagerPrivate::performAsyncConfigurationUpdate() diff --git a/src/network/bearer/qnetworkconfigmanager_p.h b/src/network/bearer/qnetworkconfigmanager_p.h index 04cce20..56f66b4 100644 --- a/src/network/bearer/qnetworkconfigmanager_p.h +++ b/src/network/bearer/qnetworkconfigmanager_p.h @@ -89,6 +89,8 @@ public: void enablePolling(); void disablePolling(); + void initialize(); + void cleanup(); public Q_SLOTS: void updateConfigurations(); @@ -109,6 +111,7 @@ private Q_SLOTS: private: Q_INVOKABLE void startPolling(); QTimer *pollTimer; + QThread *bearerThread; private: mutable QMutex mutex; |