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