<html>
 <body>
  <div style="font-family: Verdana, Arial, Helvetica, Sans-Serif;">
   <table bgcolor="#f9f3c9" width="100%" cellpadding="12" style="border: 1px #c9c399 solid; border-radius: 6px; -moz-border-radius: 6px; -webkit-border-radius: 6px;">
    <tr>
     <td>
      This is an automatically generated e-mail. To reply, visit:
      <a href="https://git.reviewboard.kde.org/r/125613/">https://git.reviewboard.kde.org/r/125613/</a>
     </td>
    </tr>
   </table>
   <br />





<blockquote style="margin-left: 1em; border-left: 2px solid #d0d0d0; padding-left: 10px;">
 <p style="margin-top: 0;">On October 26th, 2015, 5:27 p.m. UTC, <b>Aleix Pol Gonzalez</b> wrote:</p>
 <blockquote style="margin-left: 1em; border-left: 2px solid #d0d0d0; padding-left: 10px;">
  <pre style="white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;"><p style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;">This patch introduced a crash here. Could you maybe look into it? Here's a backtrace.</p>
<p style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;">It happens on some (not all) programs when the open dialog is displayed. I can reproduce it with ksnapshot and kdevelop, but not with Kate.</p>
<p style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;"><div class="codehilite" style="background: #f8f8f8"><pre style="line-height: 125%">(gdb) where
#0  0x00007ffff22925f8 in raise () from /usr/lib/libc.so.6
#1  0x00007ffff2293a7a in abort () from /usr/lib/libc.so.6
#2  0x00007ffff2f3205e in qt_message_fatal (context=..., message=<synthetic pointer>) at /home/kde-devel/frameworks/qt5/qtbase/src/corelib/global/qlogging.cpp:1610
#3  QMessageLogger::fatal (this=this@entry=0x7fffffffc070, msg=msg@entry=0x7ffff31e57f0 "ASSERT: \"%s\" in file %s, line %d") at /home/kde-devel/frameworks/qt5/qtbase/src/corelib/global/qlogging.cpp:784
#4  0x00007ffff2f2d5de in qt_assert (assertion=<optimized out>, file=<optimized out>, line=<optimized out>) at /home/kde-devel/frameworks/qt5/qtbase/src/corelib/global/qglobal.cpp:3046
#5  0x00007ffff63fb097 in KCoreDirListerCache::slotResult (this=0x7ffff669b840 <(anonymous namespace)::Q_QGS_kDirListerCache::innerFunction()::holder>, j=0xe972b0) at /home/kde-devel/frameworks/kio/src/core/kcoredirlister.cpp:1310
#6  0x00007ffff6404e41 in KCoreDirListerCache::qt_static_metacall (_o=0x7ffff669b840 <(anonymous namespace)::Q_QGS_kDirListerCache::innerFunction()::holder>, _c=QMetaObject::InvokeMetaMethod, _id=8, _a=0x7fffffffc390) at src/core/moc_kcoredirlister_p.cpp:133
#7  0x00007ffff314ae6a in QMetaObject::activate (sender=0xe972b0, signalOffset=<optimized out>, local_signal_index=<optimized out>, argv=<optimized out>) at /home/kde-devel/frameworks/qt5/qtbase/src/corelib/kernel/qobject.cpp:3730
#8  0x00007ffff4742f9b in KJob::result (this=0xe972b0, _t1=0xe972b0) at src/lib/moc_kjob.cpp:555
#9  0x00007ffff47419f1 in KJob::emitResult (this=0xe972b0) at /home/kde-devel/frameworks/kcoreaddons/src/lib/jobs/kjob.cpp:294
#10 0x00007ffff47412e4 in KJob::kill (this=0xe972b0, verbosity=KJob::EmitResult) at /home/kde-devel/frameworks/kcoreaddons/src/lib/jobs/kjob.cpp:103
#11 0x00007ffff63f6473 in KCoreDirListerCache::stopListJob (this=0x7ffff669b840 <(anonymous namespace)::Q_QGS_kDirListerCache::innerFunction()::holder>, url="file:///home/apol/Documents", silent=true) at /home/kde-devel/frameworks/kio/src/core/kcoredirlister.cpp:493
Python Exception <class 'gdb.error'> cannot resolve overloaded method `data': no arguments supplied: 
#12 0x00007ffff63f6364 in KCoreDirListerCache::stopListingUrl (this=0x7ffff669b840 <(anonymous namespace)::Q_QGS_kDirListerCache::innerFunction()::holder>, lister=0x9ef910, _u=, silent=true) at /home/kde-devel/frameworks/kio/src/core/kcoredirlister.cpp:463
#13 0x00007ffff63f613a in KCoreDirListerCache::stop (this=0x7ffff669b840 <(anonymous namespace)::Q_QGS_kDirListerCache::innerFunction()::holder>, lister=0x9ef910, silent=true) at /home/kde-devel/frameworks/kio/src/core/kcoredirlister.cpp:421
Python Exception <class 'gdb.error'> cannot resolve overloaded method `data': no arguments supplied: 
#14 0x00007ffff63f4ea1 in KCoreDirListerCache::listDir (this=0x7ffff669b840 <(anonymous namespace)::Q_QGS_kDirListerCache::innerFunction()::holder>, lister=0x9ef910, _u=, _keep=false, _reload=false) at /home/kde-devel/frameworks/kio/src/core/kcoredirlister.cpp:143
Python Exception <class 'gdb.error'> cannot resolve overloaded method `data': no arguments supplied: 
#15 0x00007ffff6400fa0 in KCoreDirLister::openUrl (this=0x9ef910, _url=, _flags=...) at /home/kde-devel/frameworks/kio/src/core/kcoredirlister.cpp:2151
Python Exception <class 'gdb.error'> cannot resolve overloaded method `data': no arguments supplied: 
#16 0x00007fffe61e1342 in KDirOperator::Private::openUrl (this=0x9f2ff0, url=, flags=...) at /home/kde-devel/frameworks/kio/src/filewidgets/kdiroperator.cpp:1069
Python Exception <class 'gdb.error'> cannot resolve overloaded method `data': no arguments supplied: 
#17 0x00007fffe61e1218 in KDirOperator::setUrl (this=0x9ee560, _newurl=, clearforward=true) at /home/kde-devel/frameworks/kio/src/filewidgets/kdiroperator.cpp:1051
Python Exception <class 'gdb.error'> cannot resolve overloaded method `data': no arguments supplied: 
#18 0x00007fffe6204b8c in KFileWidget::setUrl (this=0x89a500, url=, clearforward=true) at /home/kde-devel/frameworks/kio/src/filewidgets/kfilewidget.cpp:1460
Python Exception <class 'gdb.error'> cannot resolve overloaded method `data': no arguments supplied: 
#19 0x00007fffe64a82c8 in KDEPlatformFileDialog::setDirectory (this=0x869a90, directory=) at /home/kde-devel/frameworks/frameworkintegration/src/platformtheme/kdeplatformfiledialoghelper.cpp:189
Python Exception <class 'gdb.error'> cannot resolve overloaded method `data': no arguments supplied: 
#20 0x00007fffe64a933e in KDEPlatformFileDialogHelper::setDirectory (this=0x877040, directory=) at /home/kde-devel/frameworks/frameworkintegration/src/platformtheme/kdeplatformfiledialoghelper.cpp:352
Python Exception <class 'gdb.error'> cannot resolve overloaded method `data': no arguments supplied: 
#21 0x00007ffff3c8978b in QFileDialogPrivate::setDirectory_sys (directory=, this=<optimized out>) at /home/kde-devel/frameworks/qt5/qtbase/src/widgets/dialogs/qfiledialog_p.h:368
Python Exception <class 'gdb.error'> cannot resolve overloaded method `data': no arguments supplied: 
#22 QFileDialog::setDirectoryUrl (this=this@entry=0x7fffffffccb0, directory=) at /home/kde-devel/frameworks/qt5/qtbase/src/widgets/dialogs/qfiledialog.cpp:976
Python Exception <class 'gdb.error'> cannot resolve overloaded method `data': no arguments supplied: 
#23 0x00007ffff3c96988 in QFileDialogPrivate::init (this=0x87caf0, directory=, 
    nameFilter=";;Windows BMP image (*.bmp *.dib);;JPEG-2000 image (*.jp2 *.jpx *.jpf);;JPEG Image (*.jpeg *.jpg *.jpe *.jfif);;PNG image (*.png);;TIFF image (*.tif *.tiff);;Windows icon (*.ico);;WBMP image (*.wbmp);;"..., caption="Save Snapshot As")
    at /home/kde-devel/frameworks/qt5/qtbase/src/widgets/dialogs/qfiledialog.cpp:2804
#24 0x00007ffff3c96e66 in QFileDialog::QFileDialog (this=0x7fffffffccb0, args=...) at /home/kde-devel/frameworks/qt5/qtbase/src/widgets/dialogs/qfiledialog.cpp:373
Python Exception <class 'gdb.error'> cannot resolve overloaded method `data': no arguments supplied: 
#25 0x00007ffff3c9789b in QFileDialog::getSaveFileUrl (parent=0x7fffffffdce0, caption="Save Snapshot As", dir=, 
    filter=";;Windows BMP image (*.bmp *.dib);;JPEG-2000 image (*.jp2 *.jpx *.jpf);;JPEG Image (*.jpeg *.jpg *.jpe *.jfif);;PNG image (*.png);;TIFF image (*.tif *.tiff);;Windows icon (*.ico);;WBMP image (*.wbmp);;"..., selectedFilter=0x7fffffffcd90, options=..., 
    supportedSchemes=empty QStringList<QString>) at /home/kde-devel/frameworks/qt5/qtbase/src/widgets/dialogs/qfiledialog.cpp:2387
#26 0x000000000043995d in KSnapshot::slotSaveAs (this=0x7fffffffdce0) at /home/kde-devel/frameworks/ksnapshot/ksnapshot.cpp:347
#27 0x0000000000443ca3 in QtPrivate::FunctorCall<QtPrivate::IndexesList<>, QtPrivate::List<>, void, void (KSnapshot::*)()>::call(void (KSnapshot::*)(), KSnapshot*, void**) (f=(void (KSnapshot::*)(KSnapshot * const)) 0x4396ac <KSnapshot::slotSaveAs()>, o=0x7fffffffdce0, 
    arg=0x7fffffffd050) at /home/kde-devel/kde5/include/QtCore/qobjectdefs_impl.h:501
#28 0x0000000000443623 in QtPrivate::FunctionPointer<void (KSnapshot::*)()>::call<QtPrivate::List<>, void>(void (KSnapshot::*)(), KSnapshot*, void**) (f=(void (KSnapshot::*)(KSnapshot * const)) 0x4396ac <KSnapshot::slotSaveAs()>, o=0x7fffffffdce0, arg=0x7fffffffd050)
    at /home/kde-devel/kde5/include/QtCore/qobjectdefs_impl.h:520
#29 0x0000000000442b03 in QtPrivate::QSlotObject<void (KSnapshot::*)(), QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) (which=1, this_=0x8c4c10, r=0x7fffffffdce0, a=0x7fffffffd050, ret=0x0)
    at /home/kde-devel/kde5/include/QtCore/qobject_impl.h:143
#30 0x00007ffff314acf7 in QtPrivate::QSlotObjectBase::call (a=0x7fffffffd050, r=0x7fffffffdce0, this=<optimized out>) at ../../include/QtCore/../../../../frameworks/qt5/qtbase/src/corelib/kernel/qobject_impl.h:124
#31 QMetaObject::activate (sender=sender@entry=0x8c1fc0, signalOffset=<optimized out>, local_signal_index=local_signal_index@entry=2, argv=argv@entry=0x7fffffffd050) at /home/kde-devel/frameworks/qt5/qtbase/src/corelib/kernel/qobject.cpp:3715
#32 0x00007ffff314b667 in QMetaObject::activate (sender=sender@entry=0x8c1fc0, m=m@entry=0x7ffff3f99000 <QAbstractButton::staticMetaObject>, local_signal_index=local_signal_index@entry=2, argv=argv@entry=0x7fffffffd050)
    at /home/kde-devel/frameworks/qt5/qtbase/src/corelib/kernel/qobject.cpp:3595
#33 0x00007ffff3e0f372 in QAbstractButton::clicked (this=this@entry=0x8c1fc0, _t1=false) at .moc/moc_qabstractbutton.cpp:303
#34 0x00007ffff3b8e654 in QAbstractButtonPrivate::emitClicked (this=0x8c27e0) at /home/kde-devel/frameworks/qt5/qtbase/src/widgets/widgets/qabstractbutton.cpp:533
#35 0x00007ffff3b8fb29 in QAbstractButtonPrivate::click (this=0x8c27e0) at /home/kde-devel/frameworks/qt5/qtbase/src/widgets/widgets/qabstractbutton.cpp:526
#36 0x00007ffff3b8fc7c in QAbstractButton::mouseReleaseEvent (this=0x8c1fc0, e=0x7fffffffd4e0) at /home/kde-devel/frameworks/qt5/qtbase/src/widgets/widgets/qabstractbutton.cpp:1131
#37 0x00007ffff3af3588 in QWidget::event (this=0x8c1fc0, event=0x7fffffffd4e0) at /home/kde-devel/frameworks/qt5/qtbase/src/widgets/kernel/qwidget.cpp:9064
#38 0x00007ffff3ab2dcc in QApplicationPrivate::notify_helper (this=<optimized out>, receiver=0x8c1fc0, e=0x7fffffffd4e0) at /home/kde-devel/frameworks/qt5/qtbase/src/widgets/kernel/qapplication.cpp:3717
#39 0x00007ffff3ab88ce in QApplication::notify (this=<optimized out>, receiver=0x8c1fc0, e=0x7fffffffd4e0) at /home/kde-devel/frameworks/qt5/qtbase/src/widgets/kernel/qapplication.cpp:3275
#40 0x00007ffff311d2d8 in QCoreApplication::notifyInternal2 (receiver=receiver@entry=0x8c1fc0, event=event@entry=0x7fffffffd4e0) at /home/kde-devel/frameworks/qt5/qtbase/src/corelib/kernel/qcoreapplication.cpp:1002
#41 0x00007ffff3ab745e in QCoreApplication::sendSpontaneousEvent (event=0x7fffffffd4e0, receiver=0x8c1fc0) at ../../include/QtCore/../../../../frameworks/qt5/qtbase/src/corelib/kernel/qcoreapplication.h:230
#42 QApplicationPrivate::sendMouseEvent (receiver=receiver@entry=0x8c1fc0, event=event@entry=0x7fffffffd4e0, alienWidget=alienWidget@entry=0x8c1fc0, nativeWidget=0x7fffffffdce0, buttonDown=buttonDown@entry=0x7ffff3fa4ba0 <qt_button_down>, lastMouseReceiver=..., 
    spontaneous=true) at /home/kde-devel/frameworks/qt5/qtbase/src/widgets/kernel/qapplication.cpp:2770
#43 0x00007ffff3b0daa1 in QWidgetWindow::handleMouseEvent (this=this@entry=0x7be360, event=event@entry=0x7fffffffd8f0) at /home/kde-devel/frameworks/qt5/qtbase/src/widgets/kernel/qwidgetwindow.cpp:554
#44 0x00007ffff3b0fe7b in QWidgetWindow::event (this=0x7be360, event=0x7fffffffd8f0) at /home/kde-devel/frameworks/qt5/qtbase/src/widgets/kernel/qwidgetwindow.cpp:210
#45 0x00007ffff3ab2dcc in QApplicationPrivate::notify_helper (this=<optimized out>, receiver=0x7be360, e=0x7fffffffd8f0) at /home/kde-devel/frameworks/qt5/qtbase/src/widgets/kernel/qapplication.cpp:3717
#46 0x00007ffff3ab7d96 in QApplication::notify (this=0x7fffffffde80, receiver=0x7be360, e=0x7fffffffd8f0) at /home/kde-devel/frameworks/qt5/qtbase/src/widgets/kernel/qapplication.cpp:3498
</pre></div>
</p></pre>
 </blockquote>




 <p>On October 28th, 2015, 1:35 p.m. UTC, <b>Alberto Jiménez Ruiz</b> wrote:</p>
 <blockquote style="margin-left: 1em; border-left: 2px solid #d0d0d0; padding-left: 10px;">
  <pre style="white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;"><p style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;">Can't reproduce on Kubuntu 15.10.</p></pre>
 </blockquote>





 <p>On October 28th, 2015, 3:24 p.m. UTC, <b>Thomas Lübking</b> wrote:</p>
 <blockquote style="margin-left: 1em; border-left: 2px solid #d0d0d0; padding-left: 10px;">
  <pre style="white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;"><p style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;">Smells like a corrupted stack or threading issue.</p>
<p style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;"><div class="codehilite" style="background: #f8f8f8"><pre style="line-height: 125%">if (dirData.listersCurrentlyListing.isEmpty()) {
    qWarning() << "OOOOPS, nothing in directoryData.listersCurrentlyListing for" << jobUrlStr;
    // We're about to assert; dump the current state...
</pre></div>
</p>
<h1 style="font-size: 100%;text-rendering: inherit;padding: 0;white-space: normal;margin: 0;line-height: inherit;">ifndef NDEBUG</h1>
<p style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;"><div class="codehilite" style="background: #f8f8f8"><pre style="line-height: 125%">    printDebug();
</pre></div>
</p>
<h1 style="font-size: 100%;text-rendering: inherit;padding: 0;white-space: normal;margin: 0;line-height: inherit;">endif</h1>
<p style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;"><div class="codehilite" style="background: #f8f8f8"><pre style="line-height: 125%">    Q_ASSERT(!dirData.listersCurrentlyListing.isEmpty());
}
</pre></div>
</p>
<p style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;">unless printDebug() is capable of polluting dirData.listersCurrentlyListing (it actually looks like that, but you must undefine NDEBUG), either the stack is junk or dirData.listersCurrentlyListing got some elements while we were printing the debug info from some other thread.</p>
<p style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;">I'm no way sure what that code is supposed to do but testing
if (b)
   Q_ASSERT(!b);
looks insane.</p>
<p style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;">In doubt there should be some mutex somewhere or the entire thing doesn't make much sense.</p>
<p style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;">It would seem the stricter test to emitResult() causes a later emit and ultimately triggers this.
kate will be KF5 - and you need to build debug enabled to be Q_ASSERT != NOOP (so just watch out whether you get the warning)</p>
<p style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;">Aleix, if you can reproduce this at will, I suggest to check whether indeed at some point ::printDebug() manipulates dirData.listersCurrentlyListing - eg. add a global reference and test it in each loop in ::printDebug()</p></pre>
 </blockquote>








</blockquote>

<pre style="white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;"><p style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;">if (b) {
       // some debug output
       Q_ASSERT(!b);
    }
is definitely not insane, it's the way to print out more information about the problem before aborting.
Much more useful than just Q_ASSERT(!b).
I wager that this is neither a corrupted stack nor a threading issue, but a plain old bug.</p></pre>
<br />










<p>- David</p>


<br />
<p>On October 24th, 2015, 5:54 p.m. UTC, Alberto Jiménez Ruiz wrote:</p>








<table bgcolor="#fefadf" width="100%" cellspacing="0" cellpadding="12" style="border: 1px #888a85 solid; border-radius: 6px; -moz-border-radius: 6px; -webkit-border-radius: 6px;">
 <tr>
  <td>

<div>Review request for kdelibs, Albert Astals Cid and David Faure.</div>
<div>By Alberto Jiménez Ruiz.</div>


<p style="color: grey;"><i>Updated Oct. 24, 2015, 5:54 p.m.</i></p>







<div style="margin-top: 1.5em;">
 <b style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Bugs: </b>


 <a href="http://bugs.kde.org/show_bug.cgi?id=333436">333436</a>


</div>



<div style="margin-top: 1.5em;">
 <b style="color: #575012; font-size: 10pt;">Repository: </b>
kdelibs
</div>


<h1 style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Description </h1>
 <table width="100%" bgcolor="#ffffff" cellspacing="0" cellpadding="10" style="border: 1px solid #b8b5a0">
 <tr>
  <td>
   <pre style="margin: 0; padding: 0; white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;"><p style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;">Race condition and error notification loss in ListJob</p></pre>
  </td>
 </tr>
</table>


<h1 style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Testing </h1>
<table width="100%" bgcolor="#ffffff" cellspacing="0" cellpadding="10" style="border: 1px solid #b8b5a0">
 <tr>
  <td>
   <pre style="margin: 0; padding: 0; white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;"><p style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;">Update 1, added unittest
Changed condition of listjob slotresult finishing (When executed as a synchronous job, gets stuck in a eventloop)
Added setError to copyjob.</p>
<p style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;">Tests done on Kubuntu 15.10:</p>
<p style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;">With this folder structure in ~:
src</p>
<h6 style="font-size: 100%;text-rendering: inherit;padding: 0;white-space: normal;margin: 0;line-height: inherit;">c (Folder)</h6>
<h6 style="font-size: 100%;text-rendering: inherit;padding: 0;white-space: normal;margin: 0;line-height: inherit;">########b (Folder chmod'ed to 700 and owned by root)</h6>
<h6 style="font-size: 100%;text-rendering: inherit;padding: 0;white-space: normal;margin: 0;line-height: inherit;">#################d (10MB file made of /dev/urandom data)</h6>
<h6 style="font-size: 100%;text-rendering: inherit;padding: 0;white-space: normal;margin: 0;line-height: inherit;">########a (10MB file made of /dev/urandom data)</h6>
<p style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;">Then, (as a normal user execute: "kioclient ~/src ~/dst")</p>
<p style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;">Expected result: Notification that some files were not able to be copied (Cannot access "b" folder)
Result with latest kdelibs: Silent copying where b folder is owned by user but nothing inside.
---When all kdebugdialog flags are set, a backtrace is also seen.</p>
<p style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;">subError notifications for listjob subjobs are lost, Copyjob uses this signal to skip data.</p>
<p style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;">Also, this fix prevents a race condition. </p>
<p style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;">ListJob has another ListJob as a subjob.</p>
<p style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;">Chaild fails for whatever reason and calls error, which calls slotError, which calls slotsFinished and emitResult.
The result of the child gets collected by parent. slotResult of parent gets called, removes subjob and emitsresult because there are no subjobs left.
---That's fine as long as the slave associated with the parent emits finished before the child fails. If it doesn't, parent calls emitsResult twice.</p>
<p style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;">Result after patch: kioclient shows a MessageBox telling the copy operation could not be completed.</p></pre>
  </td>
 </tr>
</table>


<h1 style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Diffs</b> </h1>
<ul style="margin-left: 3em; padding-left: 0;">

 <li>kio/kio/job.cpp <span style="color: grey">(91712e3)</span></li>

 <li>kio/kio/jobclasses.h <span style="color: grey">(d771cfe)</span></li>

 <li>kio/tests/jobtest.h <span style="color: grey">(d3c552e)</span></li>

 <li>kio/tests/jobtest.cpp <span style="color: grey">(ee2677a)</span></li>

</ul>

<p><a href="https://git.reviewboard.kde.org/r/125613/diff/" style="margin-left: 3em;">View Diff</a></p>






  </td>
 </tr>
</table>







  </div>
 </body>
</html>