<div>Thanks for the information. The reason I asked these questions is that after incorporating these changes in builtin.c, memory leak is bein reported. Memory leak goes away on reverting the changes from builtin.c file.</div>

<div> </div>
<div>><br>> 1. Even if *builtin_t *empty; *is local to the function *builtin_create*, can<br>> it cause memory leak?<br><br>> 2. what should be the rerurn value of *isc_mem_strdup()* on success/failure?<br>><br>
> Regards,<br>> Kalpesh<br><br><br></div>
<div class="gmail_quote">On Wed, Jun 8, 2011 at 7:32 PM, Mark Andrews <span dir="ltr"><<a href="mailto:marka@isc.org">marka@isc.org</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid">
<div class="im"><br>In message <BANLkTi=<a href="mailto:DW4SsSphHF5MJ3QV4ofSquTKkGA@mail.gmail.com">DW4SsSphHF5MJ3QV4ofSquTKkGA@mail.gmail.com</a>>, kalpesh varyani writes:<br>> Hi,<br>><br>> Is it necessary to deallocate memory assigned using isc_mem_get() by<br>
> explicitly using isc_mem_free()?<br><br></div>No.  You use isc_mem_put().  See <isc/mem.h><br>
<div class="im"><br>> Ref: File builtin.c is available at<br></div>> <a href="ftp://1node.net/linux/bind-9.7.0b1/bin/named/*builtin*.*c*" target="_blank">ftp://1node.net/linux/bind-9.7.0b1/bin/named/*builtin*.*c*</a><<a href="ftp://1node.net/linux/bind-9.7.0b1/bin/named/builtin.c" target="_blank">ftp://1node.net/linux/bind-9.7.0b1/bin/named/builtin.c</a>><br>

<div class="im">><br>> Following is the code snippet:<br>><br>> static isc_result_t builtin_create(const char *zone, int argc, char<br>> **argv,void *driverdata, void **dbdata)<br>> {<br>> ...<br>> builtin_t *empty; <-- Local variable.<br>
> ...<br>> empty = *isc_mem_get*(ns_g_mctx, sizeof(*empty)); <-- Memory assigned using<br>> isc_mem_get<br>> server = isc_mem_strdup(ns_g_mctx, argv[1]);<br>> contact = isc_mem_strdup(ns_g_mctx, argv[2]);<br>
<br></div>If any of the allocations failed then free all that succeeded.<br>Return the address of empty_builtin in that case.<br>
<div class="im"><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>> }<br>> ...<br>> }<br>><br>> Here memory is assigned using isc_mem_get() however isc_mem_free() is<br>
> conditional. Thus if conditions are false then there will be no<br>> isc_mem_free().<br>><br>> 1. Even if *builtin_t *empty; *is local to the function *builtin_create*, can<br>> it cause memory leak?<br><br>
> 2. what should be the rerurn value of *isc_mem_strdup()* on success/failure?<br>><br>> Regards,<br>> Kalpesh<br>><br></div>> --20cf303f6bc668d58504a5332e6c<br>> Content-Type: text/html; charset=ISO-8859-1<br>
> Content-Transfer-Encoding: quoted-printable<br>><br>> <div>Hi,</div><br>> <div>=A0</div><br>> <div>Is it necessary to deallocate memory assigned using isc_mem_get() by e=<br>
> xplicitly using isc_mem_free()?</div><br>> <div>=A0</div><br>> <div>Ref: File=A0builtin.c is available at <a href=3D"<a href="ftp://1node.net/linux=" target="_blank">ftp://1node.net/linux=</a><br>
> /bind-9.7.0b1/bin/named/builtin.c"><font color=3D"#0e774a"><a href="ftp://1node.net/=" target="_blank">ftp://1node.net/=</a><br>> linux/bind-9.7.0b1/bin/named/<b>builtin</b>.<b>c</b></font></a></div><br>
> <div>=A0</div><br>> <div>Following is the code snippet:</div><br>> <div><span lang=3D"EN"></span>=A0</div><br>> <div><span lang=3D"EN">static isc_result_t builtin_create(const char *zone,=<br>
>  int argc, char **argv,void *driverdata, void **dbdata) </span></div><br>> <div><span lang=3D"EN">{</span></div><br>> <div><span lang=3D"EN">...<br></span><span lang=3D"EN"><span lang=3D"EN">bu=<br>
> iltin_t *empty; &lt;-- Local variable.</span></span></div><br>> <div><span lang=3D"EN"><span lang=3D"EN">...</span><br></span><span lang=3D=<br>
> "EN"><span lang=3D"EN">empty =3D <strong>isc_mem_get</strong>(ns_g_mctx, si=<br>> zeof(*empty)); &lt;-- Memory assigned using isc_mem_get<br>server =3D isc_m=<br>
> em_strdup(ns_g_mctx, argv[1]);<br><br>> contact =3D isc_mem_strdup(ns_g_mctx, argv[2]);<br>if (empty =3D=3D NULL ||=<br>>  server =3D=3D NULL || contact =3D=3D NULL) {<br>=A0=A0=A0 *dbdata =3D &amp=<br>
> ;empty_builtin;<br>=A0=A0=A0 if (server !=3D NULL)=A0=A0=A0=A0<br>=A0=A0=A0=<br>> =A0=A0=A0=A0 isc_mem_free(ns_g_mctx, server);<br><br>> =A0=A0=A0 if (contact !=3D NULL)<br>=A0=A0=A0=A0=A0=A0=A0 isc_mem_free(ns_g=<br>
> _mctx, contact);<br>=A0=A0=A0 if (empty !=3D NULL)<br>=A0=A0=A0=A0=A0=A0=A0=<br>>  isc_mem_put(ns_g_mctx, empty, sizeof (*empty));<br>} </span></span><span l=<br>> ang=3D"EN"><span lang=3D"EN"></span></span></div><br>
><br>> <div><span lang=3D"EN">...</span></div><br>> <div><span lang=3D"EN">}</span></div><br>> <div><span lang=3D"EN"></span>=A0</div><br>
> <div><span lang=3D"EN">Here memory is assigned using isc_mem_get() however =<br>
<div class="im">> isc_mem_free() is conditional. Thus if conditions are false then there will=<br></div>>  be no isc_mem_free().</span></div><br>> <div><span lang=3D"EN"></span>=A0</div><br>
> <div><span lang=3D"EN">1. Even if <span lang=3D"EN"><strong>builtin_t *empt=<br>> y; </strong>is local to the function <strong>builtin_create</strong>,=A0can=<br>
>  it cause memory leak?</span></span></div><br>> <div><span lang=3D"EN"><span lang=3D"EN">2. what should be the rerurn value=<br>>  of <strong>isc_mem_strdup()</strong> on success/failure?</span></span></di=<br>
> v><br>> <div><span lang=3D"EN"><span lang=3D"EN"></span></span>=A0</div><br>> <div><span lang=3D"EN"><span lang=3D"EN">Regards,</span></span></div><br>
> <div><span lang=3D"EN"><span lang=3D"EN">Kalpesh</span></span></div><br>><br>> --20cf303f6bc668d58504a5332e6c--<br>><br>> --===============3205411032284859244==<br>
> Content-Type: text/plain; charset="us-ascii"<br>> MIME-Version: 1.0<br>> Content-Transfer-Encoding: 7bit<br>> Content-Disposition: inline<br>><br>> _______________________________________________<br>
> bind-users mailing list<br>> <a href="mailto:bind-users@lists.isc.org">bind-users@lists.isc.org</a><br>> <a href="https://lists.isc.org/mailman/listinfo/bind-users" target="_blank">https://lists.isc.org/mailman/listinfo/bind-users</a><br>
> --===============3205411032284859244==--<br><font color="#888888">--<br>Mark Andrews, ISC<br>1 Seymour St., Dundas Valley, NSW 2117, Australia<br>PHONE: +61 2 9871 4742                 INTERNET: <a href="mailto:marka@isc.org">marka@isc.org</a><br>
</font></blockquote></div><br>