From ac95844ebd3c1e279f813e83c7fa3d6efbf0b128 Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Tue, 29 Nov 2016 16:20:19 +0100 Subject: [PATCH] Propagator: make sure every network job has a parent This could make sure that the network job gets deleted if the parent job gets deleted, and would avoid crashes like: Crash: EXCEPTION_ACCESS_VIOLATION_READ at 0xffffffff8b008a04 File "qiodevice.cpp", line 1617, in QIODevice::errorString File "propagatedownload.cpp", line 264, in OCC::GETFileJob::slotReadyRead File "moc_propagatedownload.cpp", line 85, in OCC::GETFileJob::qt_static_metacall File "qobject.cpp", line 3716, in QMetaObject::activate File "moc_qiodevice.cpp", line 154, in QIODevice::readyRead File "qnetworkreplyhttpimpl.cpp", line 1045, in QNetworkReplyHttpImplPrivate::replyDownloadData (#5329) --- src/libsync/propagatedownload.cpp | 4 ++-- src/libsync/propagateuploadng.cpp | 2 +- src/libsync/propagateuploadv1.cpp | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/libsync/propagatedownload.cpp b/src/libsync/propagatedownload.cpp index 99944204f..e6f669efe 100644 --- a/src/libsync/propagatedownload.cpp +++ b/src/libsync/propagatedownload.cpp @@ -401,7 +401,7 @@ void PropagateDownloadFile::start() // Normal job, download from oC instance _job = new GETFileJob(_propagator->account(), _propagator->_remoteFolder + _item->_file, - &_tmpFile, headers, expectedEtagForResume, _resumeStart); + &_tmpFile, headers, expectedEtagForResume, _resumeStart, this); } else { // We were provided a direct URL, use that one qDebug() << Q_FUNC_INFO << "directDownloadUrl given for " << _item->_file << _item->_directDownloadUrl; @@ -413,7 +413,7 @@ void PropagateDownloadFile::start() QUrl url = QUrl::fromUserInput(_item->_directDownloadUrl); _job = new GETFileJob(_propagator->account(), url, - &_tmpFile, headers, expectedEtagForResume, _resumeStart); + &_tmpFile, headers, expectedEtagForResume, _resumeStart, this); } _job->setBandwidthManager(&_propagator->_bandwidthManager); connect(_job, SIGNAL(finishedSignal()), this, SLOT(slotGetFinished())); diff --git a/src/libsync/propagateuploadng.cpp b/src/libsync/propagateuploadng.cpp index 106b0dcdb..ed4e702c0 100644 --- a/src/libsync/propagateuploadng.cpp +++ b/src/libsync/propagateuploadng.cpp @@ -315,7 +315,7 @@ void PropagateUploadFileNG::startNextChunk() QUrl url = chunkUrl(_currentChunk); // job takes ownership of device via a QScopedPointer. Job deletes itself when finishing - PUTFileJob* job = new PUTFileJob(_propagator->account(), url, device, headers, _currentChunk); + PUTFileJob* job = new PUTFileJob(_propagator->account(), url, device, headers, _currentChunk, this); _jobs.append(job); connect(job, SIGNAL(finishedSignal()), this, SLOT(slotPutFinished())); connect(job, SIGNAL(uploadProgress(qint64,qint64)), diff --git a/src/libsync/propagateuploadv1.cpp b/src/libsync/propagateuploadv1.cpp index dd075fa77..58dbf59bd 100644 --- a/src/libsync/propagateuploadv1.cpp +++ b/src/libsync/propagateuploadv1.cpp @@ -123,7 +123,7 @@ void PropagateUploadFileV1::startNextChunk() } // job takes ownership of device via a QScopedPointer. Job deletes itself when finishing - PUTFileJob* job = new PUTFileJob(_propagator->account(), _propagator->_remoteFolder + path, device, headers, _currentChunk); + PUTFileJob* job = new PUTFileJob(_propagator->account(), _propagator->_remoteFolder + path, device, headers, _currentChunk, this); _jobs.append(job); connect(job, SIGNAL(finishedSignal()), this, SLOT(slotPutFinished())); connect(job, SIGNAL(uploadProgress(qint64,qint64)), this, SLOT(slotUploadProgress(qint64,qint64))); -- 2.30.2