# HG changeset patch # User Chris Cannam # Date 1374238031 -3600 # Node ID 3cc81dbc31bb75ed19be1d77a6a059741b71be37 # Parent 420ade1cb6da314a5717637d902238b713ebc4b0 Use thread-local storage for network managers; otherwise we get "Cannot create children for a parent that is in a different thread" from nm.get() diff -r 420ade1cb6da -r 3cc81dbc31bb data/fileio/FileSource.cpp --- a/data/fileio/FileSource.cpp Wed Jul 17 15:43:42 2013 +0100 +++ b/data/fileio/FileSource.cpp Fri Jul 19 13:47:11 2013 +0100 @@ -25,6 +25,7 @@ #include #include #include +#include #include #include @@ -67,7 +68,7 @@ } #endif -static QNetworkAccessManager nm; +static QThreadStorage nms; FileSource::FileSource(QString fileOrUrl, ProgressReporter *reporter, QString preferredContentType) : @@ -260,6 +261,13 @@ void FileSource::init() { + { // check we have a QNetworkAccessManager + QMutexLocker locker(&m_mapMutex); + if (!nms.hasLocalData()) { + nms.setLocalData(new QNetworkAccessManager()); + } + } + if (isResource()) { #ifdef DEBUG_FILE_SOURCE std::cerr << "FileSource::init: Is a resource" << std::endl; @@ -443,7 +451,7 @@ QString("%1, */*").arg(m_preferredContentType).toLatin1()); } - m_reply = nm.get(req); + m_reply = nms.localData()->get(req); connect(m_reply, SIGNAL(readyRead()), this, SLOT(readyRead()));