Sharing: Fix crash with share deletion #4111

The problem was that Share could be deleted *before*
the OcsShareJob itself finished. Since Share was the
parent of the network job, its object would be deleted
too early.

In general, it's unnecessary to assign parents to the OcsJobs
because they delete themselves when finished.
This commit is contained in:
Christian Kamm 2015-11-11 13:28:20 +01:00
parent 196ee05fcc
commit 05d1cc9a94
8 changed files with 18 additions and 19 deletions

View file

@ -20,8 +20,8 @@
namespace OCC {
OcsJob::OcsJob(AccountPtr account, QObject* parent)
: AbstractNetworkJob(account, "", parent)
OcsJob::OcsJob(AccountPtr account)
: AbstractNetworkJob(account, "")
{
_passStatusCodes.append(100);
setIgnoreCredentialFailure(true);
@ -109,7 +109,6 @@ bool OcsJob::finished()
} else {
emit jobFinished(json);
}
deleteLater();
return true;
}

View file

@ -38,7 +38,7 @@ class OcsJob : public AbstractNetworkJob {
protected:
explicit OcsJob(AccountPtr account, QObject* parent = 0);
explicit OcsJob(AccountPtr account);
/**
* Set the verb for the job

View file

@ -15,8 +15,8 @@
namespace OCC {
OcsShareeJob::OcsShareeJob(AccountPtr account, QObject *parent)
: OcsJob(account, parent)
OcsShareeJob::OcsShareeJob(AccountPtr account)
: OcsJob(account)
{
setPath("ocs/v1.php/apps/files_sharing/api/v1/sharees");
connect(this, SIGNAL(jobFinished(QVariantMap)), SLOT(jobDone(QVariantMap)));

View file

@ -29,7 +29,7 @@ class OcsShareeJob : public OcsJob {
Q_OBJECT
public:
explicit OcsShareeJob(AccountPtr account, QObject *parent = 0);
explicit OcsShareeJob(AccountPtr account);
/**
* Get a list of sharees

View file

@ -20,8 +20,8 @@
namespace OCC {
OcsShareJob::OcsShareJob(AccountPtr account, QObject* parent)
: OcsJob(account, parent)
OcsShareJob::OcsShareJob(AccountPtr account)
: OcsJob(account)
{
setPath("ocs/v1.php/apps/files_sharing/api/v1/shares");
connect(this, SIGNAL(jobFinished(QVariantMap)), this, SLOT(jobDone(QVariantMap)));

View file

@ -36,7 +36,7 @@ public:
/**
* Constructor for new shares or listing of shares
*/
explicit OcsShareJob(AccountPtr account, QObject *parent = 0);
explicit OcsShareJob(AccountPtr account);
/**
* Get all the shares

View file

@ -52,7 +52,7 @@ QSharedPointer<Sharee> Share::getShareWith() const
void Share::setPermissions(Permissions permissions)
{
OcsShareJob *job = new OcsShareJob(_account, this);
OcsShareJob *job = new OcsShareJob(_account);
connect(job, SIGNAL(shareJobFinished(QVariantMap, QVariant)), SLOT(slotPermissionsSet(QVariantMap, QVariant)));
connect(job, SIGNAL(ocsError(int, QString)), SLOT(slotOcsError(int, QString)));
job->setPermissions(getId(), permissions);
@ -71,7 +71,7 @@ Share::Permissions Share::getPermissions() const
void Share::deleteShare()
{
OcsShareJob *job = new OcsShareJob(_account, this);
OcsShareJob *job = new OcsShareJob(_account);
connect(job, SIGNAL(shareJobFinished(QVariantMap, QVariant)), SLOT(slotDeleted()));
connect(job, SIGNAL(ocsError(int, const QString &)), SLOT(slotOcsError(int, const QString &)));
job->deleteShare(getId());
@ -125,7 +125,7 @@ bool LinkShare::getPublicUpload()
void LinkShare::setPublicUpload(bool publicUpload)
{
OcsShareJob *job = new OcsShareJob(_account, this);
OcsShareJob *job = new OcsShareJob(_account);
connect(job, SIGNAL(shareJobFinished(QVariantMap, QVariant)), SLOT(slotPublicUploadSet(QVariantMap, QVariant)));
connect(job, SIGNAL(ocsError(int, QString)), SLOT(slotOcsError(int, QString)));
job->setPublicUpload(getId(), publicUpload);
@ -144,7 +144,7 @@ void LinkShare::slotPublicUploadSet(const QVariantMap&, const QVariant &value)
void LinkShare::setPassword(const QString &password)
{
OcsShareJob *job = new OcsShareJob(_account, this);
OcsShareJob *job = new OcsShareJob(_account);
connect(job, SIGNAL(shareJobFinished(QVariantMap, QVariant)), SLOT(slotPasswordSet(QVariantMap, QVariant)));
connect(job, SIGNAL(ocsError(int, QString)), SLOT(slotOcsError(int, QString)));
job->setPassword(getId(), password);
@ -158,7 +158,7 @@ void LinkShare::slotPasswordSet(const QVariantMap&, const QVariant &value)
void LinkShare::setExpireDate(const QDate &date)
{
OcsShareJob *job = new OcsShareJob(_account, this);
OcsShareJob *job = new OcsShareJob(_account);
connect(job, SIGNAL(shareJobFinished(QVariantMap, QVariant)), SLOT(slotExpireDateSet(QVariantMap, QVariant)));
connect(job, SIGNAL(ocsError(int, QString)), SLOT(slotOcsError(int, QString)));
job->setExpireDate(getId(), date);
@ -180,7 +180,7 @@ ShareManager::ShareManager(AccountPtr account, QObject *parent)
void ShareManager::createLinkShare(const QString &path,
const QString &password)
{
OcsShareJob *job = new OcsShareJob(_account, this);
OcsShareJob *job = new OcsShareJob(_account);
connect(job, SIGNAL(shareJobFinished(QVariantMap, QVariant)), SLOT(slotLinkShareCreated(QVariantMap)));
connect(job, SIGNAL(ocsError(int, QString)), SLOT(slotOcsError(int, QString)));
job->createLinkShare(path, password);
@ -212,7 +212,7 @@ void ShareManager::createShare(const QString& path,
const QString shareWith,
const Share::Permissions permissions)
{
OcsShareJob *job = new OcsShareJob(_account, this);
OcsShareJob *job = new OcsShareJob(_account);
connect(job, SIGNAL(shareJobFinished(QVariantMap, QVariant)), SLOT(slotShareCreated(QVariantMap)));
connect(job, SIGNAL(ocsError(int, QString)), SLOT(slotOcsError(int, QString)));
job->createShare(path, shareType, shareWith, permissions);
@ -229,7 +229,7 @@ void ShareManager::slotShareCreated(const QVariantMap &reply)
void ShareManager::fetchShares(const QString &path)
{
OcsShareJob *job = new OcsShareJob(_account, this);
OcsShareJob *job = new OcsShareJob(_account);
connect(job, SIGNAL(shareJobFinished(QVariantMap, QVariant)), SLOT(slotSharesFetched(QVariantMap)));
connect(job, SIGNAL(ocsError(int, QString)), SLOT(slotOcsError(int, QString)));
job->getShares(path);

View file

@ -69,7 +69,7 @@ ShareeModel::ShareeModel(AccountPtr account,
void ShareeModel::fetch()
{
OcsShareeJob *job = new OcsShareeJob(_account, this);
OcsShareeJob *job = new OcsShareeJob(_account);
connect(job, SIGNAL(shareeJobFinished(QVariantMap)), SLOT(shareesFetched(QVariantMap)));
job->getSharees(_search, _type, 1, 50);
}