[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdelibs/kdecore/jobs
From:       Andreas Pakulat <apaku () gmx ! de>
Date:       2008-10-16 22:46:57
Message-ID: 1224197217.477432.7234.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 872341 by apaku:

Do not start the event loop when emitResult was called from inside start()
(i.e. the job cannot start because there's an error). Starting the eventloop
caused crashes or deadlocks, depending on wether the job deleted itself or not.
BUG: 172309


 M  +6 -2      kjob.cpp  
 M  +2 -0      kjob_p.h  


--- trunk/KDE/kdelibs/kdecore/jobs/kjob.cpp #872340:872341
@@ -35,7 +35,7 @@
     : q_ptr(0), uiDelegate(0), error(KJob::NoError),
       progressUnit(KJob::Bytes), percentage(0),
       suspended(false), capabilities(KJob::NoCapabilities),
-      speedTimer(0), isAutoDelete(true)
+      speedTimer(0), isAutoDelete(true), isFinished(false)
 {
     if (!_k_kjobUnitEnumRegistered) {
         _k_kjobUnitEnumRegistered = qRegisterMetaType<KJob::Unit>("KJob::Unit");
@@ -191,7 +191,9 @@
     connect( this, SIGNAL( result( KJob* ) ),
              &loop, SLOT( quit() ) );
     start();
-    loop.exec();
+    if( !d->isFinished ) {
+        loop.exec();
+    }
 
     return ( d->error == NoError );
 }
@@ -284,6 +286,8 @@
 
 void KJob::emitResult()
 {
+    Q_D(KJob);
+    d->isFinished = true;
     // If we are displaying a progress dialog, remove it first.
     emit finished( this );
 
--- trunk/KDE/kdelibs/kdecore/jobs/kjob_p.h #872340:872341
@@ -55,6 +55,8 @@
 
     static bool _k_kjobUnitEnumRegistered;
 
+    bool isFinished;
+
     Q_DECLARE_PUBLIC(KJob)
 };
 
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic