diff --git a/src/libtomahawk/utils/tomahawkutils.cpp b/src/libtomahawk/utils/tomahawkutils.cpp index 43b698e6d..c62a7d8e3 100644 --- a/src/libtomahawk/utils/tomahawkutils.cpp +++ b/src/libtomahawk/utils/tomahawkutils.cpp @@ -575,10 +575,12 @@ proxyFactory( bool noMutexLocker ) void -setProxyFactory( NetworkProxyFactory* factory ) +setProxyFactory( NetworkProxyFactory* factory, bool noMutexLocker ) { Q_ASSERT( factory ); - QMutexLocker locker( &s_namAccessMutex ); + // Don't lock if being called from setNam() + QMutex otherMutex; + QMutexLocker locker( noMutexLocker ? &otherMutex : &s_namAccessMutex ); if ( !s_threadProxyFactoryHash.contains( TOMAHAWK_APPLICATION::instance()->thread() ) ) return; @@ -662,6 +664,9 @@ setNam( QNetworkAccessManager* nam ) } s_threadNamHash[ QThread::currentThread() ] = nam; + + if ( QThread::currentThread() == TOMAHAWK_APPLICATION::instance()->thread() ) + setProxyFactory( dynamic_cast< TomahawkUtils::NetworkProxyFactory* >( nam->proxyFactory() ), true ); } diff --git a/src/libtomahawk/utils/tomahawkutils.h b/src/libtomahawk/utils/tomahawkutils.h index d8b034adf..028e55f27 100644 --- a/src/libtomahawk/utils/tomahawkutils.h +++ b/src/libtomahawk/utils/tomahawkutils.h @@ -97,7 +97,7 @@ namespace TomahawkUtils DLLEXPORT NetworkProxyFactory* proxyFactory( bool noMutexLocker = false ); DLLEXPORT QNetworkAccessManager* nam(); - DLLEXPORT void setProxyFactory( TomahawkUtils::NetworkProxyFactory* factory ); + DLLEXPORT void setProxyFactory( TomahawkUtils::NetworkProxyFactory* factory, bool noMutexLocker = false ); DLLEXPORT void setNam( QNetworkAccessManager* nam ); DLLEXPORT QWidget* tomahawkWindow();