<table><tr><td style="">hallas added a comment.
</td><a style="text-decoration: none; padding: 4px 8px; margin: 0 8px 8px; float: right; color: #464C5C; font-weight: bold; border-radius: 3px; background-color: #F7F7F9; background-image: linear-gradient(to bottom,#fff,#f1f0f1); display: inline-block; border: 1px solid rgba(71,87,120,.2);" href="https://phabricator.kde.org/D19170">View Revision</a></tr></table><br /><div><div><p>I think I have finally found the root cause of this. The following events occurs:</p>

<ol class="remarkup-list">
<li class="remarkup-list-item">A FileCopyJob is created and added as a SubJob to CopyJob</li>
<li class="remarkup-list-item">CopyJob::slotResult is notified</li>
<li class="remarkup-list-item">CopyJobPrivate::slotResultCopyingFiles is called because it is in state STATE_COPYING_FILES</li>
<li class="remarkup-list-item">CopyJobPrivate::slotResultErrorCopyingFiles is called bcause the FileCopyJob is reporting an error</li>
<li class="remarkup-list-item">uiDelegateExtension()->askSkip is called to ask the user how to handle the error</li>
<li class="remarkup-list-item">The askSkip function starts a modal QDialog and calls exec, this means a new QEventLoop is started and runs.</li>
<li class="remarkup-list-item">Before the askSkip function returns, CopyJob::slotResult is notified again because a new error occurs on the same FileCopyJob</li>
<li class="remarkup-list-item">CopyJobPrivate::slotResultCopyingFiles is called because it is in state STATE_COPYING_FILES</li>
<li class="remarkup-list-item">CopyJobPrivate::slotResultErrorCopyingFiles is called bcause the FileCopyJob is reporting an error</li>
<li class="remarkup-list-item">uiDelegateExtension()->askSkip is called to ask the user how to handle the error</li>
<li class="remarkup-list-item">The user responds and the job is cancelled</li>
<li class="remarkup-list-item">Finally the initial call to askSkip returns but we are now in an inconsistent state because the job that was notified has been deleted</li>
</ol>

<p>So to avoid getting notifications for the same Job while waiting for user feedback I have tried to simply call removeSubJob prior to calling askSkip, since that function disconnects from the result signal. Also removeSubJob will anyway be call after the user has responded. This also means that the problem is in KIO::CopyJob and not i KJob.</p></div></div><br /><div><strong>REPOSITORY</strong><div><div>R244 KCoreAddons</div></div></div><br /><div><strong>REVISION DETAIL</strong><div><a href="https://phabricator.kde.org/D19170">https://phabricator.kde.org/D19170</a></div></div><br /><div><strong>To: </strong>hallas, Frameworks, elvisangelaccio, dfaure<br /><strong>Cc: </strong>dhaumann, kde-frameworks-devel, michaelh, ngraham, bruns<br /></div>