<p>In <a href="https://github.com/OpenSIPS/opensips/pull/715#discussion_r53200587">modules/db_virtual/dbase.c</a>:</p>
<pre style='color:#555'>&gt; @@ -512,3 +512,180 @@ int db_virtual_insert_update(const db_con_t* _h, const db_key_t* _k,
&gt;  {
&gt;      db_generic_operation2(insert_update(handle-&gt;con, _k, _v, _n),1, 1, 1);
&gt;  }
&gt; +
&gt; +#define CURRCON(__ah__) (__ah__-&gt;current_con)
&gt; +
&gt; +#define db_generic_async_operation(__h,__ah, _resume_f, FUNC_WITH_ARGS)         \
</pre>
<p>What's the deal with all the underscores in macro params? To prevent upper function variable overriding? If yes, working out the output of the following code before running it yourself will definitely be good exercise:</p>

<pre><code>main() {
    int a = 1, b = 2;
    #define foo(a) a = 2
    foo(b);
    printf("%d %d\n", a, b);
}
</code></pre>

<p>As a side note, prefixing a C function with <code>__</code> is actually <strong>useful</strong> when intending to mark that function as <em>"a low-level function you should use with caution"</em>. Take for example <code>set_proc_log_level</code>, which makes use of <code>__set_proc_log_level</code> behind the curtains.</p>

<p style="font-size:small;-webkit-text-size-adjust:none;color:#666;">&mdash;<br>Reply to this email directly or <a href="https://github.com/OpenSIPS/opensips/pull/715/files#r53200587">view it on GitHub</a>.<img alt="" height="1" src="https://github.com/notifications/beacon/AFOciY50-ov2tDOgWBvsRNvccqqJeJV_ks5plKcygaJpZM4Gt7dV.gif" width="1" /></p>
<div itemscope itemtype="http://schema.org/EmailMessage">
<div itemprop="action" itemscope itemtype="http://schema.org/ViewAction">
  <link itemprop="url" href="https://github.com/OpenSIPS/opensips/pull/715/files#r53200587"></link>
  <meta itemprop="name" content="View Pull Request"></meta>
</div>
<meta itemprop="description" content="View this Pull Request on GitHub"></meta>
</div>