<table><tr><td style="">alnikiforov updated this revision to Diff 76439.<br />alnikiforov retitled this revision from "Don't use guarded pointers for AppletsLayout" to "ItemContainer: disconnect signals in destructor".<br />alnikiforov edited the summary of this revision. <a href="https://phabricator.kde.org/transactions/detail/PHID-XACT-DREV-ktjdt3dm2bxdf7k/">(Show Details)</a><br />alnikiforov 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/D27650">View Revision</a></tr></table><br /><div><div><p>Uploaded updated change</p></div></div><br /><div><strong>CHANGES TO REVISION SUMMARY</strong><div><div style="white-space: pre-wrap; color: #74777D;"><span style="padding: 0 2px; color: #333333; background: rgba(251, 175, 175, .7);">Using these pointer types incorrectly leads to premature destruction<br />
of AppletsLayout object and crash<br />
<br />
AppletsLayout m_layout is set only in function ItemContainer::setLayout.</span><span style="padding: 0 2px; color: #333333; background: rgba(151, 234, 151, .6);">Otherwise, setLayout function might be called for already</span><br />
<span style="padding: 0 2px; color: #333333; background: rgba(251, 175, 175, .7);">This function takes a plain pointer and wraps it into weak shared pointer.</span><span style="padding: 0 2px; color: #333333; background: rgba(151, 234, 151, .6);">destructed instance of ItemContainer,</span><br />
<span style="padding: 0 2px; color: #333333; background: rgba(251, 175, 175, .7);">Eventually weak shared pointer's internal counter reaches zero and object insta</span><span style="padding: 0 2px; color: #333333; background: rgba(151, 234, 151, .6);">leading to double refere</span>nce <span style="padding: 0 2px; color: #333333; background: rgba(251, 175, 175, .7);">m_layout points to is destroyed,</span><span style="padding: 0 2px; color: #333333; background: rgba(151, 234, 151, .6);">counter decrement</span><br />
<span style="padding: 0 2px; color: #333333; background: rgba(251, 175, 175, .7);">although it was created via qml in plasma-desktop. This object destruction leads to a lot of issues</span><span style="padding: 0 2px; color: #333333; background: rgba(151, 234, 151, .6);">of m_layout QPointer's QWeakPointer</span>, <span style="padding: 0 2px; color: #333333; background: rgba(251, 175, 175, .7);">including eventual crash</span><span style="padding: 0 2px; color: #333333; background: rgba(151, 234, 151, .6);">eventually invalidating such pointers prematurely</span>.<div style="padding: 8px 0;">...</div></div></div></div><br /><div><strong>REPOSITORY</strong><div><div>R120 Plasma Workspace</div></div></div><br /><div><strong>CHANGES SINCE LAST UPDATE</strong><div><a href="https://phabricator.kde.org/D27650?vs=76364&id=76439">https://phabricator.kde.org/D27650?vs=76364&id=76439</a></div></div><br /><div><strong>REVISION DETAIL</strong><div><a href="https://phabricator.kde.org/D27650">https://phabricator.kde.org/D27650</a></div></div><br /><div><strong>AFFECTED FILES</strong><div><div>components/containmentlayoutmanager/itemcontainer.cpp</div></div></div><br /><div><strong>To: </strong>alnikiforov, ngraham, davidedmundson, mart<br /><strong>Cc: </strong>plasma-devel, Orage, LeGast00n, The-Feren-OS-Dev, cblack, jraleigh, zachus, fbampaloukas, GB_2, ragreen, ZrenBot, ngraham, himcesjf, lesliezhai, ali-mohamed, jensreuterberg, abetts, sebas, apol, ahiemstra, mart<br /></div>