diff options
Diffstat (limited to 'src/network/bearer/qnetworkconfigmanager_p.cpp')
-rw-r--r-- | src/network/bearer/qnetworkconfigmanager_p.cpp | 29 |
1 files changed, 17 insertions, 12 deletions
diff --git a/src/network/bearer/qnetworkconfigmanager_p.cpp b/src/network/bearer/qnetworkconfigmanager_p.cpp index d152adca92..ce04934865 100644 --- a/src/network/bearer/qnetworkconfigmanager_p.cpp +++ b/src/network/bearer/qnetworkconfigmanager_p.cpp @@ -366,6 +366,10 @@ void QNetworkConfigurationManagerPrivate::configurationChanged(QNetworkConfigura void QNetworkConfigurationManagerPrivate::updateConfigurations() { +#ifndef QT_NO_LIBRARY + typedef QMultiMap<int, QString> PluginKeyMap; + typedef PluginKeyMap::const_iterator PluginKeyMapConstIterator; +#endif QMutexLocker locker(&mutex); if (firstUpdate) { @@ -376,15 +380,12 @@ void QNetworkConfigurationManagerPrivate::updateConfigurations() #ifndef QT_NO_LIBRARY QBearerEngine *generic = 0; - QFactoryLoader *l = loader(); - foreach (const QString &key, l->keys()) { - QBearerEnginePlugin *plugin = qobject_cast<QBearerEnginePlugin *>(l->instance(key)); - if (plugin) { - QBearerEngine *engine = plugin->create(key); - if (!engine) - continue; - + const PluginKeyMap keyMap = l->keyMap(); + const PluginKeyMapConstIterator cend = keyMap.constEnd(); + for (PluginKeyMapConstIterator it = keyMap.constBegin(); it != cend; ++it) { + const QString &key = it.value(); + if (QBearerEngine *engine = qLoadPlugin<QBearerEngine, QBearerEnginePlugin>(l, key)) { if (key == QLatin1String("generic")) generic = engine; else @@ -393,13 +394,17 @@ void QNetworkConfigurationManagerPrivate::updateConfigurations() engine->moveToThread(bearerThread); connect(engine, SIGNAL(updateCompleted()), - this, SLOT(updateConfigurations())); + this, SLOT(updateConfigurations()), + Qt::QueuedConnection); connect(engine, SIGNAL(configurationAdded(QNetworkConfigurationPrivatePointer)), - this, SLOT(configurationAdded(QNetworkConfigurationPrivatePointer))); + this, SLOT(configurationAdded(QNetworkConfigurationPrivatePointer)), + Qt::QueuedConnection); connect(engine, SIGNAL(configurationRemoved(QNetworkConfigurationPrivatePointer)), - this, SLOT(configurationRemoved(QNetworkConfigurationPrivatePointer))); + this, SLOT(configurationRemoved(QNetworkConfigurationPrivatePointer)), + Qt::QueuedConnection); connect(engine, SIGNAL(configurationChanged(QNetworkConfigurationPrivatePointer)), - this, SLOT(configurationChanged(QNetworkConfigurationPrivatePointer))); + this, SLOT(configurationChanged(QNetworkConfigurationPrivatePointer)), + Qt::QueuedConnection); } } |