<table><tr><td style="">rjvbb updated this revision to Diff 79868.<br />rjvbb 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/D28043">View Revision</a></tr></table><br /><div><div><p>Updated and improved version:</p>

<ul class="remarkup-list">
<li class="remarkup-list-item">the registration with the ProcessController is done "JIT", just before enqueing the first document for actual parsing</li>
<li class="remarkup-list-item">keep track of documents via the QUrls of IndexedStrings</li>
</ul>

<p>Both changes are necessary because the first set of documents to be parsed (= the documents restored on session launch?) may not actually get parsed (I see that with a session holding TCL-based projects), and that first set will not be deleted until the session exits. Then, BackgroundParser::documentClosed calls the proxy's unregisterUrl() method via a queued connection and those calls will be performed much later, after the Core cleanup handler has exitted. By then the IndexedString references are no longer safe to use, hence the need to store deep (QUrl) copies of them.<br />
Registering in JIT fashion with the ProcessController prevents a persistent job entry that I was seeing in sessions where none of the initial documents were actually parsed, and which caused instability if an attempt was made to cancel it via the ProcessController.</p></div></div><br /><div><strong>CHANGES SINCE LAST UPDATE</strong><div><a href="https://phabricator.kde.org/D28043?vs=77846&id=79868">https://phabricator.kde.org/D28043?vs=77846&id=79868</a></div></div><br /><div><strong>REVISION DETAIL</strong><div><a href="https://phabricator.kde.org/D28043">https://phabricator.kde.org/D28043</a></div></div><br /><div><strong>AFFECTED FILES</strong><div><div>kdevplatform/language/backgroundparser/backgroundparser.cpp<br />
kdevplatform/language/backgroundparser/backgroundparser.h<br />
kdevplatform/language/backgroundparser/parseprojectjob.cpp</div></div></div><br /><div><strong>To: </strong>rjvbb, KDevelop, aaronpuchert<br /><strong>Cc: </strong>kdevelop-devel, hmitonneau, christiant, glebaccon, domson, antismap, iodelay, alexeymin, geetamc, Pilzschaf, akshaydeo, surgenight, arrowd<br /></div>