<p></p>
<h3 dir="auto">Description</h3>
<p dir="auto">See <code>lock_hash</code> in <code>h_table.c</code>:</p>
<div class="highlight highlight-source-c"><pre><span class="pl-k">void</span> <span class="pl-en">lock_hash</span>(<span class="pl-k">int</span> i)
{
    <span class="pl-k">int</span> mypid;

    mypid = <span class="pl-c1">my_pid</span>();
    <span class="pl-k">if</span> (<span class="pl-c1">likely</span>(<span class="pl-c1">atomic_get</span>(&_tm_table-><span class="pl-smi">entries</span>[i].<span class="pl-smi">locker_pid</span>) != mypid)) {
        <span class="pl-c1">lock</span>(&_tm_table-><span class="pl-smi">entries</span>[i].<span class="pl-smi">mutex</span>);
        <span class="pl-c1">atomic_set</span>(&_tm_table-><span class="pl-smi">entries</span>[i].<span class="pl-smi">locker_pid</span>, mypid);
    } <span class="pl-k">else</span> {
        <span class="pl-c"><span class="pl-c">/*</span> locked within the same process that called us<span class="pl-c">*/</span></span>
        _tm_table-><span class="pl-smi">entries</span>[i].<span class="pl-smi">rec_lock_level</span>++;
    }
}</pre></div>
<p dir="auto">Flowing lines of code do not guarantee atomicity and I think it is not safe:</p>
<ul dir="auto">
<li>atomic_get(&_tm_table->entries[i].locker_pid) != mypid</li>
<li>lock(&_tm_table->entries[i].mutex)</li>
<li>atomic_set(&_tm_table->entries[i].locker_pid, mypid)</li>
</ul>
<p dir="auto">Would you mind solving my confusion?</p>

<p style="font-size:small;-webkit-text-size-adjust:none;color:#666;">—<br />Reply to this email directly, <a href="https://github.com/kamailio/kamailio/issues/3083">view it on GitHub</a>, or <a href="https://github.com/notifications/unsubscribe-auth/ABO7UZNDFRTT7YSXFJEGGUDVE2MLZANCNFSM5TKET7WA">unsubscribe</a>.<br />You are receiving this because you are subscribed to this thread.<img src="https://github.com/notifications/beacon/ABO7UZI65USJL5TQO5SO5ZLVE2MLZA5CNFSM5TKET7WKYY3PNVWWK3TUL52HS4DFUVEXG43VMWVGG33NNVSW45C7NFSM4R5VTSCA.gif" height="1" width="1" alt="" /><span style="color: transparent; font-size: 0; display: none; visibility: hidden; overflow: hidden; opacity: 0; width: 0; height: 0; max-width: 0; max-height: 0; mso-hide: all">Message ID: <span><kamailio/kamailio/issues/3083</span><span>@</span><span>github</span><span>.</span><span>com></span></span></p>
<script type="application/ld+json">[
{
"@context": "http://schema.org",
"@type": "EmailMessage",
"potentialAction": {
"@type": "ViewAction",
"target": "https://github.com/kamailio/kamailio/issues/3083",
"url": "https://github.com/kamailio/kamailio/issues/3083",
"name": "View Issue"
},
"description": "View this Issue on GitHub",
"publisher": {
"@type": "Organization",
"name": "GitHub",
"url": "https://github.com"
}
}
]</script>