diff --git a/thirdparty/liblastfm2/src/ws/ws.cpp b/thirdparty/liblastfm2/src/ws/ws.cpp index 89c6ece6b..232824ddd 100644 --- a/thirdparty/liblastfm2/src/ws/ws.cpp +++ b/thirdparty/liblastfm2/src/ws/ws.cpp @@ -25,9 +25,10 @@ #include #include #include +#include #include -static QNetworkAccessManager* nam = 0; +static QMap< QThread*, QNetworkAccessManager* > threadNamMap; QString lastfm::ws::host() @@ -191,18 +192,30 @@ lastfm::ws::parse( QNetworkReply* reply ) throw( ParseError ) QNetworkAccessManager* lastfm::nam() -{ - if (!::nam) ::nam = new NetworkAccessManager( qApp ); - return ::nam; +{ + QThread* thread = QThread::currentThread(); + if ( !threadNamMap.contains( thread ) ) + { + NetworkAccessManager* newNam = new NetworkAccessManager(); + threadNamMap[thread] = newNam; + return newNam; + } + + return threadNamMap[thread]; } void lastfm::setNetworkAccessManager( QNetworkAccessManager* nam ) { - delete ::nam; - ::nam = nam; - nam->setParent( qApp ); // ensure it isn't deleted out from under us + QThread* thread = QThread::currentThread(); + if ( threadNamMap.contains( thread ) ) + { + delete threadNamMap[thread]; + threadNamMap[thread] = 0; + } + + threadNamMap[thread] = nam; }