Author: abartlet Date: 2007-08-06 03:01:59 +0000 (Mon, 06 Aug 2007) New Revision: 24246
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=24246 Log: Avoid the annoying 'probable memory leak in ldb' messages, by fixing some issues in the NBT server (this was a false positive, but easily worked around) and DRSUAPI server. We should take care not to use the ldb_context as a talloc pool, and to always ensure that any results from ldb_search() are moved off that pool with talloc_steal or talloc_free(). To work around the issue in provision, for which I can find no fault (other than a lot of work being done in provision), I've moved the detector trigger to 400 additional blocks. This fixes Bug #4810 by <[EMAIL PROTECTED]> Andrew Bartlett Modified: branches/SAMBA_4_0/source/lib/db_wrap.c branches/SAMBA_4_0/source/nbt_server/dgram/netlogon.c branches/SAMBA_4_0/source/rpc_server/drsuapi/dcesrv_drsuapi.c Changeset: Modified: branches/SAMBA_4_0/source/lib/db_wrap.c =================================================================== --- branches/SAMBA_4_0/source/lib/db_wrap.c 2007-08-06 01:36:49 UTC (rev 24245) +++ branches/SAMBA_4_0/source/lib/db_wrap.c 2007-08-06 03:01:59 UTC (rev 24246) @@ -80,7 +80,7 @@ { size_t *startup_blocks = (size_t *)ldb_get_opaque(ldb, "startup_blocks"); if (startup_blocks && - talloc_total_blocks(ldb) > *startup_blocks + 100) { + talloc_total_blocks(ldb) > *startup_blocks + 400) { DEBUG(0,("WARNING: probable memory leak in ldb %s - %lu blocks (startup %lu) %lu bytes\n", (char *)ldb_get_opaque(ldb, "wrap_url"), (unsigned long)talloc_total_blocks(ldb), @@ -88,6 +88,8 @@ (unsigned long)talloc_total_size(ldb))); #if 0 talloc_report_full(ldb, stdout); + call_backtrace(); + smb_panic("probable memory leak in ldb"); #endif } return 0; Modified: branches/SAMBA_4_0/source/nbt_server/dgram/netlogon.c =================================================================== --- branches/SAMBA_4_0/source/nbt_server/dgram/netlogon.c 2007-08-06 01:36:49 UTC (rev 24245) +++ branches/SAMBA_4_0/source/nbt_server/dgram/netlogon.c 2007-08-06 03:01:59 UTC (rev 24246) @@ -58,9 +58,9 @@ return; } - partitions_basedn = samdb_partitions_dn(samctx, samctx); + partitions_basedn = samdb_partitions_dn(samctx, packet); - ret = gendb_search(samctx, samctx, partitions_basedn, &ref_res, ref_attrs, + ret = gendb_search(samctx, packet, partitions_basedn, &ref_res, ref_attrs, "(&(&(nETBIOSName=%s)(objectclass=crossRef))(ncName=*))", name->name); @@ -128,9 +128,9 @@ return; } - partitions_basedn = samdb_partitions_dn(samctx, samctx); + partitions_basedn = samdb_partitions_dn(samctx, packet); - ret = gendb_search(samctx, samctx, partitions_basedn, &ref_res, ref_attrs, + ret = gendb_search(samctx, packet, partitions_basedn, &ref_res, ref_attrs, "(&(&(nETBIOSName=%s)(objectclass=crossRef))(ncName=*))", name->name); @@ -140,7 +140,7 @@ } /* try and find the domain */ - ret = gendb_search_dn(samctx, samctx, + ret = gendb_search_dn(samctx, packet, samdb_result_dn(samctx, samctx, ref_res[0], "ncName", NULL), &dom_res, dom_attrs); if (ret != 1) { Modified: branches/SAMBA_4_0/source/rpc_server/drsuapi/dcesrv_drsuapi.c =================================================================== --- branches/SAMBA_4_0/source/rpc_server/drsuapi/dcesrv_drsuapi.c 2007-08-06 01:36:49 UTC (rev 24245) +++ branches/SAMBA_4_0/source/rpc_server/drsuapi/dcesrv_drsuapi.c 2007-08-06 03:01:59 UTC (rev 24246) @@ -556,7 +556,7 @@ struct ldb_dn *domain_dn; struct ldb_result *res_domain; struct ldb_result *res_account; - struct ldb_dn *ntds_dn = ldb_dn_copy(b_state->sam_ctx, res->msgs[i]->dn); + struct ldb_dn *ntds_dn = ldb_dn_copy(mem_ctx, res->msgs[i]->dn); struct ldb_dn *ref_dn = ldb_msg_find_attr_as_dn(b_state->sam_ctx, @@ -617,9 +617,9 @@ struct ldb_dn *domain_dn; struct ldb_result *res_domain; struct ldb_result *res_account; - struct ldb_dn *ntds_dn = ldb_dn_copy(b_state->sam_ctx, res->msgs[i]->dn); + struct ldb_dn *ntds_dn = ldb_dn_copy(mem_ctx, res->msgs[i]->dn); struct ldb_result *res_ntds; - struct ldb_dn *site_dn = ldb_dn_copy(b_state->sam_ctx, res->msgs[i]->dn); + struct ldb_dn *site_dn = ldb_dn_copy(mem_ctx, res->msgs[i]->dn); struct ldb_result *res_site; struct ldb_dn *ref_dn = ldb_msg_find_attr_as_dn(b_state->sam_ctx,
