diff --git a/kerfuffle/cliinterface.cpp b/kerfuffle/cliinterface.cpp --- a/kerfuffle/cliinterface.cpp +++ b/kerfuffle/cliinterface.cpp @@ -1075,6 +1075,7 @@ return false; } + bool CliInterface::doKill() { if (m_process) { @@ -1082,6 +1083,9 @@ m_abortingOperation = true; if (!m_process->waitForFinished(5)) { m_process->kill(); + + // It takes a few hundred ms for the process to be killed. + m_process->waitForFinished(1000); } m_abortingOperation = false; diff --git a/kerfuffle/jobs.cpp b/kerfuffle/jobs.cpp --- a/kerfuffle/jobs.cpp +++ b/kerfuffle/jobs.cpp @@ -48,7 +48,9 @@ : QThread(parent) , q(job) { - connect(q, &KJob::result, this, &QThread::quit); + // We need to call terminate() here, because the eventloop is already + // dead and hence calling quit() won't work. + connect(q, &KJob::finished, this, &QThread::terminate); } virtual void run() Q_DECL_OVERRIDE; diff --git a/part/jobtracker.cpp b/part/jobtracker.cpp --- a/part/jobtracker.cpp +++ b/part/jobtracker.cpp @@ -41,7 +41,7 @@ JobTracker::~JobTracker() { foreach(KJob *job, m_jobs) { - job->kill(); + job->kill(KJob::Quietly); delete job; } } diff --git a/part/part.cpp b/part/part.cpp --- a/part/part.cpp +++ b/part/part.cpp @@ -194,9 +194,8 @@ m_jobTracker->widget(job)->show(); } m_jobTracker->registerJob(job); - emit busy(); - connect(job, &KJob::finished, this, &Part::ready); + connect(job, &KJob::result, this, &Part::ready); } // TODO: KIO::mostLocalHere is used here to resolve some KIO URLs to local