[SCM] Samba Shared Repository - branch master updated - release-4-0-0alpha8-85-g53b9a24

Volker Lendecke vlendec at samba.org
Sat Jun 27 20:31:56 GMT 2009


The branch, master has been updated
       via  53b9a24ce38acc79d8086b502f0e8ff048ef67bc (commit)
      from  79c299f96fe1780c0ca09d2ed429a2640ec56744 (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 53b9a24ce38acc79d8086b502f0e8ff048ef67bc
Author: Volker Lendecke <vl at samba.org>
Date:   Sat Jun 27 22:28:47 2009 +0200

    tldap: Don't fire off more than one read_ldap request during searches

-----------------------------------------------------------------------

Summary of changes:
 source3/lib/tldap.c |   32 ++++++++++++++++++++++----------
 1 files changed, 22 insertions(+), 10 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/lib/tldap.c b/source3/lib/tldap.c
index 376e03f..0f9e678 100644
--- a/source3/lib/tldap.c
+++ b/source3/lib/tldap.c
@@ -591,20 +591,32 @@ static void tldap_msg_received(struct tevent_req *subreq)
 	ev = state->ev;
 
 	talloc_set_destructor(req, NULL);
-	tldap_msg_destructor(req);
+	tldap_msg_unset_pending(req);
+	num_pending = talloc_array_length(ld->pending);
+
 	tevent_req_done(req);
 
  done:
-	if (talloc_array_length(ld->pending) > 0) {
-		state = tevent_req_data(ld->pending[0],
-					struct tldap_msg_state);
-		subreq = read_ldap_send(ld->pending, state->ev, ld->fd);
-		if (subreq == NULL) {
-			status = TLDAP_NO_MEMORY;
-			goto fail;
-		}
-		tevent_req_set_callback(subreq, tldap_msg_received, ld);
+	if (num_pending == 0) {
+		return;
+	}
+	if (talloc_array_length(ld->pending) > num_pending) {
+		/*
+		 * The callback functions called from tevent_req_done() above
+		 * have put something on the pending queue. We don't have to
+		 * trigger the read_ldap_send(), tldap_msg_set_pending() has
+		 * done it for us already.
+		 */
+		return;
+	}
+
+	state = tevent_req_data(ld->pending[0], struct tldap_msg_state);
+	subreq = read_ldap_send(ld->pending, state->ev, ld->fd);
+	if (subreq == NULL) {
+		status = TLDAP_NO_MEMORY;
+		goto fail;
 	}
+	tevent_req_set_callback(subreq, tldap_msg_received, ld);
 	return;
 
  fail:


-- 
Samba Shared Repository


More information about the samba-cvs mailing list