From kdevelop-devel Fri Dec 17 03:12:23 2010 From: Olivier JG Date: Fri, 17 Dec 2010 03:12:23 +0000 To: kdevelop-devel Subject: Re: Killability of ImportProjectJob Message-Id: <4D0AD517.9010605 () gmail ! com> X-MARC-Message: https://marc.info/?l=kdevelop-devel&m=129255597716494 On 11/21/2010 01:00 AM, Milian Wolff wrote: > On Saturday 20 November 2010 17:50:31 Milian Wolff wrote: >> Hey all, >> >> currently the ImportProjectJob is not really interruptable. It has doKill >> that just waitForFinished which can easily lead to deadlocks nowadays, >> since we can import stuff from the background bug QMetaType::invokeMethod >> in the projectmodel then. E.g.: > btw, I just notice that this is probably only hit when I try this patch: > > diff --git a/shell/project.cpp b/shell/project.cpp > index c8fbc53..877c4a9 100644 > --- a/shell/project.cpp > +++ b/shell/project.cpp > @@ -237,9 +237,10 @@ public: > > loading=false; > if(job->errorText().isEmpty()) { > - projCtrl->projectModel()->appendRow(topItem); > projCtrl->projectImportingFinished( project ); > } else { > + Q_ASSERT(topItem->index().isValid()); > + projCtrl->projectModel()->removeRow(topItem->row()); > projCtrl->closeProject(project); > } > } > @@ -516,6 +517,7 @@ bool Project::open( const KUrl& projectFileUrl_ ) > d->loadVersionControlPlugin(projectGroup); > d->progress->setBuzzy(); > KJob* importJob = iface->createImportJob(d->topItem ); > + Core::self()->projectController()->projectModel()->appendRow(d->topItem); > connect( importJob, SIGNAL( result( KJob* ) ), this, SLOT( importDone( > KJob* ) ) ); > Core::self()->runController()->registerJob( importJob ); > return true; > > Which would be an (imo) awesome addition to KDevelop. It didn't used to work > as items where added from random threads but now that they are always added > from the UI it just works™ As I noted here: https://bugs.kde.org/show_bug.cgi?id=256709 it seems that the ImportProjectJob cannot be canceled because it is run with QtConcurrent::run(), which the documentation states doesn't support being canceled. All you can do is wait for it to finish. Until such a time as someone rewrites ProjectImportJob to support killing, shouldn't the ImportProjectJob simply not advertise itself as Killable? (As a side note, when I remove the call to setCapabilities(killable), the stop button still gets enabled, but simply doesn't do anything...) -Olivier JG -- KDevelop-devel mailing list KDevelop-devel@kdevelop.org https://barney.cs.uni-potsdam.de/mailman/listinfo/kdevelop-devel