<div>Hi,</div>
<div> </div>
<div>Is it necessary to deallocate memory assigned using isc_mem_get() by explicitly using isc_mem_free()?</div>
<div> </div>
<div>Ref: File builtin.c is available at <a href="ftp://1node.net/linux/bind-9.7.0b1/bin/named/builtin.c"><font color="#0e774a">ftp://1node.net/linux/bind-9.7.0b1/bin/named/<b>builtin</b>.<b>c</b></font></a></div>
<div> </div>
<div>Following is the code snippet:</div>
<div><span lang="EN"></span> </div>
<div><span lang="EN">static isc_result_t builtin_create(const char *zone, int argc, char **argv,void *driverdata, void **dbdata) </span></div>
<div><span lang="EN">{</span></div>
<div><span lang="EN">...<br></span><span lang="EN"><span lang="EN">builtin_t *empty; <-- Local variable.</span></span></div>
<div><span lang="EN"><span lang="EN">...</span><br></span><span lang="EN"><span lang="EN">empty = <strong>isc_mem_get</strong>(ns_g_mctx, sizeof(*empty)); <-- Memory assigned using isc_mem_get<br>server = isc_mem_strdup(ns_g_mctx, argv[1]);<br>
contact = isc_mem_strdup(ns_g_mctx, argv[2]);<br>if (empty == NULL || server == NULL || contact == NULL) {<br>    *dbdata = &empty_builtin;<br>    if (server != NULL)    <br>        isc_mem_free(ns_g_mctx, server);<br>
    if (contact != NULL)<br>        isc_mem_free(ns_g_mctx, contact);<br>    if (empty != NULL)<br>        isc_mem_put(ns_g_mctx, empty, sizeof (*empty));<br>} </span></span><span lang="EN"><span lang="EN"></span></span></div>

<div><span lang="EN">...</span></div>
<div><span lang="EN">}</span></div>
<div><span lang="EN"></span> </div>
<div><span lang="EN">Here memory is assigned using isc_mem_get() however isc_mem_free() is conditional. Thus if conditions are false then there will be no isc_mem_free().</span></div>
<div><span lang="EN"></span> </div>
<div><span lang="EN">1. Even if <span lang="EN"><strong>builtin_t *empty; </strong>is local to the function <strong>builtin_create</strong>, can it cause memory leak?</span></span></div>
<div><span lang="EN"><span lang="EN">2. what should be the rerurn value of <strong>isc_mem_strdup()</strong> on success/failure?</span></span></div>
<div><span lang="EN"><span lang="EN"></span></span> </div>
<div><span lang="EN"><span lang="EN">Regards,</span></span></div>
<div><span lang="EN"><span lang="EN">Kalpesh</span></span></div>