svn commit: samba r24246 - in branches/SAMBA_4_0/source: lib nbt_server/dgram rpc_server/drsuapi

abartlet at samba.org abartlet at samba.org
Mon Aug 6 03:02:00 GMT 2007


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 <mwallnoefer at yahoo.de>

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, 



More information about the samba-cvs mailing list