<table><tr><td style="">aaronpuchert 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/D22182">View Revision</a></tr></table><br /><div><div><blockquote style="border-left: 3px solid #8C98B8;
          color: #6B748C;
          font-style: italic;
          margin: 4px 0 12px 0;
          padding: 8px 12px;
          background-color: #F8F9FC;">
<div style="font-style: normal;
          padding-bottom: 4px;">In <a href="https://phabricator.kde.org/D22182#489873" style="background-color: #e7e7e7;
          border-color: #e7e7e7;
          border-radius: 3px;
          padding: 0 4px;
          font-weight: bold;
          color: black;text-decoration: none;">D22182#489873</a>, <a href="https://phabricator.kde.org/p/mswan/" style="
              border-color: #f1f7ff;
              color: #19558d;
              background-color: #f1f7ff;
                border: 1px solid transparent;
                border-radius: 3px;
                font-weight: bold;
                padding: 0 4px;">@mswan</a> wrote:</div>
<div style="margin: 0;
          padding: 0;
          border: 0;
          color: rgb(107, 116, 140);"><p>This should definitely be tried and I would be interested in the task. There is definitely quite alot of stuff that needs to be annotated to make this work so it might need several hands working on it.</p></div>
</blockquote>

<p>I'd be delighted and would happily work with you on this. I worked on the Thread Safety Analysis feature for a while.</p>

<blockquote style="border-left: 3px solid #a7b5bf; color: #464c5c; font-style: italic; margin: 4px 0 12px 0; padding: 4px 12px; background-color: #f8f9fc;"><p>The one problem with adopting that system in KDevelop is that we copy <tt style="background: #ebebeb; font-size: 13px;">DUChain::lock()</tt> into each instance of <tt style="background: #ebebeb; font-size: 13px;">DUChain{Read,Write}Locker</tt> which means that our annotations wouldn't see the <tt style="background: #ebebeb; font-size: 13px;">DUChainReadLocker</tt> in one instance as the same lock in another instance.</p></blockquote>

<p>I don't think the lock is copied, it's just a pointer to it. That's not an issue, <tt style="background: #ebebeb; font-size: 13px;">std::lock_guard</tt> does that as well. Note that <tt style="background: #ebebeb; font-size: 13px;">DUChainLock</tt> would be annotated with <tt style="background: #ebebeb; font-size: 13px;">__attribute__((capability("mutex")))</tt>, but <tt style="background: #ebebeb; font-size: 13px;">DUChainReadLocker</tt> with <tt style="background: #ebebeb; font-size: 13px;">__attribute__((scoped_capability))</tt>. The analysis tracks which scoped capability owns which capability.</p>

<blockquote style="border-left: 3px solid #a7b5bf; color: #464c5c; font-style: italic; margin: 4px 0 12px 0; padding: 4px 12px; background-color: #f8f9fc;"><p>Since I have never seen <tt style="background: #ebebeb; font-size: 13px;">DUChain{Read,Write}Locker</tt> used with anything other than <tt style="background: #ebebeb; font-size: 13px;">DUChain::lock()</tt></p></blockquote>

<p>Wondered about this as well—the constructor allows specifying any lock, but this is used only with <tt style="background: #ebebeb; font-size: 13px;">DUChain::lock()</tt>.</p>

<blockquote style="border-left: 3px solid #a7b5bf; color: #464c5c; font-style: italic; margin: 4px 0 12px 0; padding: 4px 12px; background-color: #f8f9fc;"><p>this shouldn't be cause for false positive deadlock detection.</p></blockquote>

<p>Deadlock detection needs to turned on separately anyway. (With <tt style="background: #ebebeb; font-size: 13px;">-Wthread-safety-negative</tt>, because it requires "negative capabilities", i.e. someone not having a lock as opposed to having it.)</p>

<p>I wouldn't worry too much about that for now.</p></div></div><br /><div><strong>REPOSITORY</strong><div><div>R32 KDevelop</div></div></div><br /><div><strong>REVISION DETAIL</strong><div><a href="https://phabricator.kde.org/D22182">https://phabricator.kde.org/D22182</a></div></div><br /><div><strong>To: </strong>mswan, KDevelop<br /><strong>Cc: </strong>aaronpuchert, kdevelop-devel, hmitonneau, christiant, glebaccon, domson, antismap, iodelay, alexeymin, geetamc, Pilzschaf, akshaydeo, surgenight, arrowd<br /></div>