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





<blockquote style="margin-left: 1em; border-left: 2px solid #d0d0d0; padding-left: 10px;">
 <p style="margin-top: 0;">On November 20th, 2013, 6:02 p.m. UTC, <b>Albert Astals Cid</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;">I don't see why this should fix anything. Do you think anyone in the bug can provide a valgrind trace to better understand why it's crashing?</pre>
 </blockquote>




 <p>On November 20th, 2013, 6:34 p.m. UTC, <b>Christoph Feck</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;">See also https://git.reviewboard.kde.org/r/102981/ which has some discussion and links to related bugs.</pre>
 </blockquote>





 <p>On November 20th, 2013, 6:39 p.m. UTC, <b>Albert Astals Cid</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;">Why is it related? Who is modifying the entries variable? It's used in 4 places in the file, and actually there's no way to remove stuff from it, so I don't see how it is related to the bug you point.</pre>
 </blockquote>





 <p>On November 20th, 2013, 6:46 p.m. UTC, <b>Christoph Feck</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;">They are only related because replacing qDeleteAll() with manual deletion fixed the crash for Boudewijn. Since my understanding ended there, I suggested to post a review request.</pre>
 </blockquote>





 <p>On November 20th, 2013, 8:08 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;">See http://lists.kde.org/?t=132194778400005&r=1&w=2
Qt 4.8 changed qDeleteAll to rely on the container being immutable.

The patch detaches the container, what allows safe operation despite - what's likely happening as it seemed the core issue back than - the container is altered by the deletion of one or more of its items (eg. the items deconstructor delists itself)

An alternative solution would be to pass the to-be-deleted objects class a static member flag to skip self delisting and set that around qDeleteAll() (which would be followed by an erase())</pre>
 </blockquote>





 <p>On November 20th, 2013, 8:18 p.m. UTC, <b>Albert Astals Cid</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;">Please look at the code and tell us where the item deconstructor delists itself from the list.</pre>
 </blockquote>





 <p>On November 20th, 2013, 8:41 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;">I said that it seemed the core issue back then, not that it happens here (for sure) or would be the only trigger.

Briefly looking at KArchive, i'd rather bet on a recursion (entries containing a KArchiveEntry being or ultimately pointing down to the same  KArchiveDirectory)
Just a wild guess, though - but testable if one can reproduce the bug (unless you can assure that cannot be the case)</pre>
 </blockquote>





 <p>On November 21st, 2013, 8:41 p.m. UTC, <b>Boudewijn Rempt</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;">I haven't been able to reproduce it myself on Linux. On Windows it was a lot easier, but there I use an old and completely hacked-up version of kdelibs. However, when I was giving a workshop at LGM, pretty much half of the Linux users present (most of them *buntu) users had to disable autosave to prevent this crash from happening.

I'm puzzled... And I would love a better fix than mine, but that will have to come from someone who understands karchive -- which I don't, not really.</pre>
 </blockquote>





 <p>On November 22nd, 2013, 12:12 a.m. UTC, <b>Friedrich W. H. Kossebau</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;">I do not have a better fix yet, but I think I found the root of the problem:
in case of a duplicated name for an entry in KZip::doPrepareWriting() the old entry is removed from d->m_fileList, but not from the parentDir directory holding it:
https://projects.kde.org/projects/kde/kdelibs/repository/revisions/ee5dea835039c8a8f765321378dbed398826f368/entry/kdecore/io/kzip.cpp#L1026

Thus on destruction of that dir the qDeleteAll will try to delete an entry that is already deleted. Seems that triggers not always a crash, perhaps because the memory might still be available?

Sadly I do not have a kdelibs development environment setup currently and also short of disk space, so cannot come up with a patch/unittest. Anyone? But so far I already see the problem that KArchiveDirectory has a method "addEntry( KArchiveEntry* )" (which currently in case of adding an entry with the same name qwarns about that, and ignores the new entry), but not some "removeEntry( KArchiveEntry* )". This needs some more thinking what the proper behaviour should be and how to solve that. Perhaps "addEntry( KArchiveEntry* )" should just overwrite the old entry, that would at least match the behaviour in KZip::doPrepareWriting()...

Any takers?</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;">Took it myself ;)

Please see & review https://git.reviewboard.kde.org/r/114048/ for a proposal how to fix that problem in KZip::doPrepareWriting().</pre>
<br />










<p>- Friedrich W. H.</p>


<br />
<p>On November 20th, 2013, 9:40 a.m. UTC, Boudewijn Rempt wrote:</p>








<table bgcolor="#fefadf" width="100%" cellspacing="0" cellpadding="8" style="background-image: url('http://git.reviewboard.kde.org/static/rb/images/review_request_box_top_bg.ab6f3b1072c9.png'); background-position: left top; background-repeat: repeat-x; border: 1px black solid;">
 <tr>
  <td>

<div>Review request for kdelibs.</div>
<div>By Boudewijn Rempt.</div>


<p style="color: grey;"><i>Updated Nov. 20, 2013, 9:40 a.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=321100">321100</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;">While I haven't been able to reproduce the issue on Linux, many Krita users encounter a crash in the destructor of  KArchiveDirectoryPrivate, where all entries are removed with qDeleteAll.

This patch removes the use of qDeleteAll.

I'm not 100% sure whether this is correct, but it works for me with the Windows build of kdelibs I use.</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>kdecore/io/karchive.cpp <span style="color: grey">(88e1de0)</span></li>

</ul>

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







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








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