Killability of ImportProjectJob
Aleix Pol
aleixpol at kde.org
Fri Dec 17 03:39:53 UTC 2010
On Fri, Dec 17, 2010 at 4:12 AM, Olivier JG <olivier.jg at gmail.com> wrote:
> 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 at kdevelop.org
> https://barney.cs.uni-potsdam.de/mailman/listinfo/kdevelop-devel
>
Right now what we're doing is that if it's cancelled the process is told to
be finished ASAP. If the project is using the "QList ::parse()" method
properly it will stop reading further in the tree and close the project.
Aleix
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.kde.org/pipermail/kdevelop-devel/attachments/20101217/1938ff7a/attachment.html>
More information about the KDevelop-devel
mailing list