Killability of ImportProjectJob

Aleix Pol aleixpol at kde.org
Fri Dec 17 04:14:01 UTC 2010


It works for cmake, if nobody changed it from back when I implemented it, at
least.

Aleix

On Fri, Dec 17, 2010 at 5:09 AM, Olivier JG <olivier.jg at gmail.com> wrote:

>  On 12/17/2010 11:39 AM, Aleix Pol wrote:
>
> 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
>
>
> Sure, but from what I can tell, it's never cancelled, because that's not
> supported for something started with QtConcurrent::run().
> -Olivier JG
>
>
> --
> KDevelop-devel mailing list
> KDevelop-devel at kdevelop.org
> https://barney.cs.uni-potsdam.de/mailman/listinfo/kdevelop-devel
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.kde.org/pipermail/kdevelop-devel/attachments/20101217/6c5c711b/attachment.html>


More information about the KDevelop-devel mailing list