From 12c68efa09b48f00f538d84e56622a26034e5e33 Mon Sep 17 00:00:00 2001 From: Martin Nagy Date: Wed, 18 Feb 2009 20:18:39 +0100 Subject: Fix memory leaks resulted from creating rdatasets. We use kind of a hack really. We overwrite each created rdataset's methods by our own that will free the resources. --- ldap_helper.c | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) (limited to 'ldap_helper.c') diff --git a/ldap_helper.c b/ldap_helper.c index ac9be6e..18bfb5e 100644 --- a/ldap_helper.c +++ b/ldap_helper.c @@ -558,26 +558,35 @@ ldapdb_rdatalist_findrdatatype(ldapdb_rdatalist_t *rdatalist, void ldapdb_rdatalist_destroy(isc_mem_t *mctx, ldapdb_rdatalist_t *rdatalist) { - dns_rdata_t *rdata; dns_rdatalist_t *rdlist; - isc_region_t r; REQUIRE(rdatalist != NULL); while (!EMPTY(*rdatalist)) { rdlist = HEAD(*rdatalist); - while (!EMPTY(rdlist->rdata)) { - rdata = HEAD(rdlist->rdata); - UNLINK(rdlist->rdata, rdata, link); - dns_rdata_toregion(rdata, &r); - isc_mem_put(mctx, r.base, r.length); - isc_mem_put(mctx, rdata, sizeof(*rdata)); - } + free_rdatalist(mctx, rdlist); UNLINK(*rdatalist, rdlist, link); isc_mem_put(mctx, rdlist, sizeof(*rdlist)); } } +void +free_rdatalist(isc_mem_t *mctx, dns_rdatalist_t *rdlist) +{ + dns_rdata_t *rdata; + isc_region_t r; + + REQUIRE(rdlist != NULL); + + while (!EMPTY(rdlist->rdata)) { + rdata = HEAD(rdlist->rdata); + UNLINK(rdlist->rdata, rdata, link); + dns_rdata_toregion(rdata, &r); + isc_mem_put(mctx, r.base, r.length); + isc_mem_put(mctx, rdata, sizeof(*rdata)); + } +} + isc_result_t ldapdb_rdatalist_get(isc_mem_t *mctx, ldap_db_t *ldap_db, dns_name_t *name, ldapdb_rdatalist_t *rdatalist) -- cgit