diff --git a/src/libtomahawk/infosystem/infosystemworker.cpp b/src/libtomahawk/infosystem/infosystemworker.cpp index 5c707de9f..091683c28 100644 --- a/src/libtomahawk/infosystem/infosystemworker.cpp +++ b/src/libtomahawk/infosystem/infosystemworker.cpp @@ -169,6 +169,7 @@ InfoSystemWorker::newNam() { qDebug() << Q_FUNC_INFO << " begin"; + Q_ASSERT( TomahawkUtils::nam() != 0 ); QNetworkAccessManager *oldNam = TomahawkUtils::nam(); if ( oldNam && oldNam->thread() == thread() ) { diff --git a/src/libtomahawk/playlist/albummodel.cpp b/src/libtomahawk/playlist/albummodel.cpp index 7e28d655d..d493e5953 100644 --- a/src/libtomahawk/playlist/albummodel.cpp +++ b/src/libtomahawk/playlist/albummodel.cpp @@ -337,6 +337,7 @@ AlbumModel::onCoverArtDownloaded() // Follow HTTP redirect QNetworkRequest req( redir ); req.setAttribute( QNetworkRequest::User, reply->request().attribute( QNetworkRequest::User ) ); + Q_ASSERT( TomahawkUtils::nam() != 0 ); QNetworkReply* reply = TomahawkUtils::nam()->get( req ); connect( reply, SIGNAL( finished() ), SLOT( onCoverArtDownloaded() ) ); } diff --git a/src/libtomahawk/utils/tomahawkutils.cpp b/src/libtomahawk/utils/tomahawkutils.cpp index e652f5e43..b2ae5afa4 100644 --- a/src/libtomahawk/utils/tomahawkutils.cpp +++ b/src/libtomahawk/utils/tomahawkutils.cpp @@ -340,13 +340,16 @@ createDragPixmap( int itemCount ) } -QNetworkAccessManager* s_nam = 0; -QNetworkProxy* s_proxy = 0; +QWeakPointer< QNetworkAccessManager > s_nam; +QNetworkProxy* s_proxy; QNetworkAccessManager* nam() { - return s_nam; + if ( s_nam.isNull() ) + return 0; + + return s_nam.data(); } @@ -360,7 +363,7 @@ proxy() void setNam( QNetworkAccessManager* nam ) { - s_nam = nam; + s_nam = QWeakPointer< QNetworkAccessManager >( nam ); } diff --git a/src/libtomahawk/utils/xspfloader.cpp b/src/libtomahawk/utils/xspfloader.cpp index 9b1543375..c02897ec8 100644 --- a/src/libtomahawk/utils/xspfloader.cpp +++ b/src/libtomahawk/utils/xspfloader.cpp @@ -40,6 +40,7 @@ void XSPFLoader::load( const QUrl& url ) { QNetworkRequest request( url ); + Q_ASSERT( TomahawkUtils::nam() != 0 ); QNetworkReply* reply = TomahawkUtils::nam()->get( request ); // isn't there a race condition here? something could happen before we connect() diff --git a/src/settingsdialog.cpp b/src/settingsdialog.cpp index ca481749c..fee043b4b 100644 --- a/src/settingsdialog.cpp +++ b/src/settingsdialog.cpp @@ -324,6 +324,7 @@ ProxyDialog::saveSettings() // Now, set QNAM QNetworkProxy proxy( static_cast(s->proxyType()), s->proxyHost(), s->proxyPort(), s->proxyUsername(), s->proxyPassword() ); + Q_ASSERT( TomahawkUtils::nam() != 0 ); QNetworkAccessManager* nam = TomahawkUtils::nam(); nam->setProxy( proxy ); QNetworkProxy* globalProxy = TomahawkUtils::proxy(); diff --git a/src/sip/twitter/twitter.cpp b/src/sip/twitter/twitter.cpp index 0e31ff0fa..65a9af55e 100644 --- a/src/sip/twitter/twitter.cpp +++ b/src/sip/twitter/twitter.cpp @@ -146,6 +146,7 @@ TwitterPlugin::refreshTwitterAuth() if( !m_twitterAuth.isNull() ) delete m_twitterAuth.data(); + Q_ASSERT( TomahawkUtils::nam() != 0 ); qDebug() << Q_FUNC_INFO << " with nam " << TomahawkUtils::nam(); m_twitterAuth = QWeakPointer( new TomahawkOAuthTwitter( TomahawkUtils::nam(), this ) ); diff --git a/src/tomahawkapp.cpp b/src/tomahawkapp.cpp index fa14acec6..93e942843 100644 --- a/src/tomahawkapp.cpp +++ b/src/tomahawkapp.cpp @@ -198,7 +198,6 @@ TomahawkApp::init() qDebug() << "Proxy type =" << QString::number( static_cast(TomahawkUtils::proxy()->type()) ); qDebug() << "Proxy host =" << TomahawkUtils::proxy()->hostName(); TomahawkUtils::nam()->setProxy( *TomahawkUtils::proxy() ); - lastfm::nam()->setProxy( *TomahawkUtils::proxy() ); } else TomahawkUtils::setProxy( new QNetworkProxy( QNetworkProxy::NoProxy ) ); diff --git a/src/tomahawkwindow.cpp b/src/tomahawkwindow.cpp index 26e680418..56fdcb1ea 100644 --- a/src/tomahawkwindow.cpp +++ b/src/tomahawkwindow.cpp @@ -162,6 +162,7 @@ TomahawkWindow::TomahawkWindow( QWidget* parent ) updaterUrl.setUrl( "http://download.tomahawk-player.org/sparklewin" ); qtsparkle::Updater* updater = new qtsparkle::Updater( updaterUrl, this ); + Q_ASSERT( TomahawkUtils::nam() != 0 ); updater->SetNetworkAccessManager( TomahawkUtils::nam() ); updater->SetVersion( TOMAHAWK_VERSION ); diff --git a/thirdparty/liblastfm2/src/ws/ws.cpp b/thirdparty/liblastfm2/src/ws/ws.cpp index 3dc1631fa..90c08374d 100644 --- a/thirdparty/liblastfm2/src/ws/ws.cpp +++ b/thirdparty/liblastfm2/src/ws/ws.cpp @@ -30,7 +30,7 @@ #include static QMap< QThread*, QNetworkAccessManager* > threadNamHash; -static QMap< QThread*, bool > ourNamHash; +static QSet< QThread* > ourNamSet; static QMutex namAccessMutex; QString @@ -205,10 +205,11 @@ lastfm::nam() qDebug() << Q_FUNC_INFO << " does not yet have a NAM, creating a new one"; NetworkAccessManager* newNam = new NetworkAccessManager(); threadNamHash[thread] = newNam; - ourNamHash[thread] = true; + ourNamSet.insert( thread ); qDebug() << Q_FUNC_INFO << " returning " << threadNamHash[thread]; return newNam; } + Q_ASSERT( threadNamHash[thread] ); qDebug() << Q_FUNC_INFO << " found a nam, is " << threadNamHash[thread]; return threadNamHash[thread]; } @@ -223,11 +224,14 @@ lastfm::setNetworkAccessManager( QNetworkAccessManager* nam ) QMutexLocker l( &namAccessMutex ); QThread* thread = QThread::currentThread(); QNetworkAccessManager* oldNam = 0; - if ( threadNamHash.contains( thread ) && ourNamHash.contains( thread ) && ourNamHash[thread] ) + if ( threadNamHash.contains( thread ) && ourNamSet.contains( thread ) ) oldNam = threadNamHash[thread]; + + if ( oldNam == nam ) + return; threadNamHash[thread] = nam; - ourNamHash[thread] = false; + ourNamSet.remove( thread ); if ( oldNam ) delete oldNam;