[SCM] Samba Shared Repository - branch v3-3-test updated - release-3-2-0pre2-4327-g9ff5479

Michael Adam obnox at samba.org
Sun Nov 2 21:49:14 GMT 2008


The branch, v3-3-test has been updated
       via  9ff54794f1a477cc294ddef6b218a5e68c894128 (commit)
      from  5e331c1cab20644550dc8d10f706b8561cce42ab (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-3-test


- Log -----------------------------------------------------------------
commit 9ff54794f1a477cc294ddef6b218a5e68c894128
Author: Michael Adam <obnox at samba.org>
Date:   Thu Oct 30 16:38:07 2008 +0100

    winbindd: speed up fill_grent_mem (i.e. winbindd_getgrent) a lot.
    
    With large groups, getgrent ran into timeouts because after each
    single user that was added to the expanded group list, the list
    was sorted and made unique.
    
    Now the list is sorted just once after all members have been added.
    
    Michael

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

Summary of changes:
 source/winbindd/winbindd_group.c |   33 ++++++++++++++++++++-------------
 1 files changed, 20 insertions(+), 13 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source/winbindd/winbindd_group.c b/source/winbindd/winbindd_group.c
index 088f946..8fa6712 100644
--- a/source/winbindd/winbindd_group.c
+++ b/source/winbindd/winbindd_group.c
@@ -378,6 +378,24 @@ static int namecmp( const void *a, const void *b )
 	return StrCaseCmp( * (char * const *) a, * (char * const *) b);
 }
 
+static void sort_unique_list(char ***list, uint32 *n_list)
+{
+	uint32_t i;
+
+	/* search for duplicates for sorting and looking for matching
+	   neighbors */
+
+	qsort(*list, *n_list, sizeof(char*), QSORT_CAST namecmp);
+
+	for (i=1; i < *n_list; i++) {
+		if (strcmp((*list)[i-1], (*list)[i]) == 0) {
+			memmove(&((*list)[i-1]), &((*list)[i]),
+				 sizeof(char*)*((*n_list)-i));
+			(*n_list)--;
+		}
+	}
+}
+
 static NTSTATUS add_names_to_list( TALLOC_CTX *ctx,
 				   char ***list, uint32 *n_list,
 				   char **names, uint32 n_names )
@@ -410,19 +428,6 @@ static NTSTATUS add_names_to_list( TALLOC_CTX *ctx,
 		new_list[i] = talloc_strdup( new_list, names[j] );
 	}
 
-	/* search for duplicates for sorting and looking for matching
-	   neighbors */
-
-	qsort( new_list, n_new_list, sizeof(char*), QSORT_CAST namecmp );
-
-	for ( i=1; i<n_new_list; i++ ) {
-		if ( strcmp( new_list[i-1], new_list[i] ) == 0 ) {
-			memmove( &new_list[i-1], &new_list[i],
-				 sizeof(char*)*(n_new_list-i) );
-			n_new_list--;
-		}
-	}
-
 	*list = new_list;
 	*n_list = n_new_list;
 
@@ -659,6 +664,8 @@ static bool fill_grent_mem(struct winbindd_domain *domain,
 	}
 	TALLOC_FREE( glist );
 
+	sort_unique_list(&names, &num_names);
+
 	DEBUG(10, ("looked up %d names\n", num_names));
 
  again:


-- 
Samba Shared Repository


More information about the samba-cvs mailing list