From 032e6f8d6f6333cbb7f0713366cc1d294e7d6135 Mon Sep 17 00:00:00 2001 From: Jeff Mitchell Date: Sun, 1 May 2011 02:19:59 -0400 Subject: [PATCH] Update local liblastfm2 to deal better with threads and qnams --- thirdparty/liblastfm2/src/ws/ws.cpp | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) 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; }