[SCM] Samba Shared Repository - branch v3-2-test updated - initial-v3-2-unstable-1197-gc7cb98d

Volker Lendecke vl at samba.org
Tue Jan 8 21:15:12 GMT 2008


The branch, v3-2-test has been updated
       via  c7cb98d486ef8af1dc7111c2316fd73db9fef9f8 (commit)
       via  1a15778331393f9ece9aac9450828e799b20a058 (commit)
      from  ac3a433befca2c6b674fc7e7f2f2c700d78b0a0c (commit)

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


- Log -----------------------------------------------------------------
commit c7cb98d486ef8af1dc7111c2316fd73db9fef9f8
Author: Volker Lendecke <vl at samba.org>
Date:   Tue Jan 8 22:12:35 2008 +0100

    Only realloc the talloc stack if necessary

commit 1a15778331393f9ece9aac9450828e799b20a058
Author: Volker Lendecke <vl at samba.org>
Date:   Tue Jan 8 21:45:21 2008 +0100

    Allocate dirp->name_cache on demand only

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

Summary of changes:
 source/lib/talloc_stack.c |   19 ++++++++++++-------
 source/smbd/dir.c         |   21 ++++++++++-----------
 2 files changed, 22 insertions(+), 18 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source/lib/talloc_stack.c b/source/lib/talloc_stack.c
index cc7ce3a..d887b2d 100644
--- a/source/lib/talloc_stack.c
+++ b/source/lib/talloc_stack.c
@@ -39,6 +39,7 @@
 #include "includes.h"
 
 static int talloc_stacksize;
+static int talloc_stack_arraysize;
 static TALLOC_CTX **talloc_stack;
 
 static int talloc_pop(TALLOC_CTX *frame)
@@ -67,21 +68,25 @@ TALLOC_CTX *talloc_stackframe(void)
 {
 	TALLOC_CTX **tmp, *top;
 
-	if (!(tmp = TALLOC_REALLOC_ARRAY(NULL, talloc_stack, TALLOC_CTX *,
-					 talloc_stacksize + 1))) {
-		goto fail;
-	}
+	if (talloc_stack_arraysize < talloc_stacksize + 1) {
+		tmp = TALLOC_REALLOC_ARRAY(NULL, talloc_stack, TALLOC_CTX *,
+					   talloc_stacksize + 1);
+		if (tmp == NULL) {
+			goto fail;
+		}
+		talloc_stack = tmp;
+		talloc_stack_arraysize = talloc_stacksize + 1;
+        }
 
-	talloc_stack = tmp;
+	top = talloc_new(talloc_stack);
 
-	if (!(top = talloc_new(talloc_stack))) {
+	if (top == NULL) {
 		goto fail;
 	}
 
 	talloc_set_destructor(top, talloc_pop);
 
 	talloc_stack[talloc_stacksize++] = top;
-
 	return top;
 
  fail:
diff --git a/source/smbd/dir.c b/source/smbd/dir.c
index ab6e12f..04e3167 100644
--- a/source/smbd/dir.c
+++ b/source/smbd/dir.c
@@ -1139,16 +1139,6 @@ struct smb_Dir *OpenDir(connection_struct *conn, const char *name, const char *m
 		goto fail;
 	}
 
-	if (dirp->name_cache_size) {
-		dirp->name_cache = SMB_CALLOC_ARRAY(struct name_cache_entry,
-				dirp->name_cache_size);
-		if (!dirp->name_cache) {
-			goto fail;
-		}
-	} else {
-		dirp->name_cache = NULL;
-	}
-
 	dirhandles_open++;
 	return dirp;
 
@@ -1295,10 +1285,19 @@ void DirCacheAdd(struct smb_Dir *dirp, const char *name, long offset)
 {
 	struct name_cache_entry *e;
 
-	if (!dirp->name_cache_size || !dirp->name_cache) {
+	if (dirp->name_cache_size == 0) {
 		return;
 	}
 
+	if (dirp->name_cache == NULL) {
+		dirp->name_cache = SMB_CALLOC_ARRAY(struct name_cache_entry,
+						    dirp->name_cache_size);
+
+		if (dirp->name_cache == NULL) {
+			return;
+		}
+	}
+
 	dirp->name_cache_index = (dirp->name_cache_index+1) %
 					dirp->name_cache_size;
 	e = &dirp->name_cache[dirp->name_cache_index];


-- 
Samba Shared Repository


More information about the samba-cvs mailing list