On Fri, Dec 17, 2010 at 4:12 AM, Olivier
JG
<olivier.jg@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@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.