Hopeful fix to ACs crash

This commit is contained in:
Atlante45 2014-07-03 18:17:01 -07:00
parent bc3823f1f7
commit b0e83c32ff
2 changed files with 4 additions and 6 deletions

View file

@ -211,13 +211,10 @@ void Agent::run() {
NetworkAccessManager& networkAccessManager = NetworkAccessManager::getInstance(); NetworkAccessManager& networkAccessManager = NetworkAccessManager::getInstance();
QNetworkReply *reply = networkAccessManager.get(QNetworkRequest(scriptURL)); QNetworkReply *reply = networkAccessManager.get(QNetworkRequest(scriptURL));
// Make sure cache on same thread than its parent (NetworkAccessManager)
QNetworkDiskCache* cache = new QNetworkDiskCache(); QNetworkDiskCache* cache = new QNetworkDiskCache();
cache->moveToThread(networkAccessManager.thread());
cache->setParent(&networkAccessManager);
QString cachePath = QStandardPaths::writableLocation(QStandardPaths::DataLocation); QString cachePath = QStandardPaths::writableLocation(QStandardPaths::DataLocation);
cache->setCacheDirectory(!cachePath.isEmpty() ? cachePath : "agentCache"); cache->setCacheDirectory(!cachePath.isEmpty() ? cachePath : "agentCache");
cache->moveToThread(networkAccessManager.thread());
networkAccessManager.setCache(cache); networkAccessManager.setCache(cache);
qDebug() << "Downloading script at" << scriptURL.toString(); qDebug() << "Downloading script at" << scriptURL.toString();
@ -273,4 +270,5 @@ void Agent::run() {
void Agent::aboutToFinish() { void Agent::aboutToFinish() {
_scriptEngine.stop(); _scriptEngine.stop();
NetworkAccessManager::getInstance().clearAccessCache();
} }

View file

@ -21,6 +21,7 @@ NetworkAccessManager& NetworkAccessManager::getInstance() {
} }
NetworkAccessManager::NetworkAccessManager() { NetworkAccessManager::NetworkAccessManager() {
qRegisterMetaType<QAbstractNetworkCache*>();
} }
QNetworkReply* NetworkAccessManager::get(const QNetworkRequest& request) { QNetworkReply* NetworkAccessManager::get(const QNetworkRequest& request) {
@ -151,10 +152,9 @@ QNetworkReply* NetworkAccessManager::sendCustomRequest(const QNetworkRequest& re
void NetworkAccessManager::setCache(QAbstractNetworkCache* cache) { void NetworkAccessManager::setCache(QAbstractNetworkCache* cache) {
if (QThread::currentThread() != thread()) { if (QThread::currentThread() != thread()) {
qRegisterMetaType<QAbstractNetworkCache*>();
QMetaObject::invokeMethod(this, QMetaObject::invokeMethod(this,
"setCache", "setCache",
Qt::QueuedConnection, Qt::BlockingQueuedConnection,
Q_ARG(QAbstractNetworkCache*, cache)); Q_ARG(QAbstractNetworkCache*, cache));
} }
QNetworkAccessManager::setCache(cache); QNetworkAccessManager::setCache(cache);