The branch, master has been updated
       via  11d60d1 s4-ldb_wrap: Do not vasprintf() the ldb debug messages that 
will not be shown
       via  73f0cb5 lib/ldb: Do not vasprintf() the tevent debug messages that 
will not be shown
       via  7e562cf s4-events: Do not vasprintf() the tevent debug messages 
that will not be shown
       via  434bed7 s3-events: Do not vasprintf() the tevent debug messages 
that will not be shown
       via  299fc75 lib/ldb: Use tdb_exists() rather than 
tdb_fetch()/talloc_free()
      from  d799b25 s4-dsdb: Remove strcasecmp() fallback in 
replmd_ldb_message_element_attid_sort

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


- Log -----------------------------------------------------------------
commit 11d60d13dc54ff154b2a7bb53e326ed2180d473c
Author: Andrew Bartlett <abart...@samba.org>
Date:   Thu Aug 9 19:41:05 2012 +1000

    s4-ldb_wrap: Do not vasprintf() the ldb debug messages that will not be 
shown
    
    This malloc() and free() actually shows up quite high on a call profile of
    provision of the AD DC.
    
    Andrew Bartlett
    
    Autobuild-User(master): Andrew Bartlett <abart...@samba.org>
    Autobuild-Date(master): Thu Aug  9 13:51:06 CEST 2012 on sn-devel-104

commit 73f0cb5278e714740d0de75e6b0d0bf4c815491a
Author: Andrew Bartlett <abart...@samba.org>
Date:   Thu Aug 9 19:40:45 2012 +1000

    lib/ldb: Do not vasprintf() the tevent debug messages that will not be shown
    
    This malloc() and free() actually shows up quite high on a call profile of
    provision of the AD DC.
    
    This allows the debug handler to decide if the argument list should be
    printed.
    
    Andrew Bartlett

commit 7e562cf3eb8d8aabf9b5d62a92e67221e4f07e3a
Author: Andrew Bartlett <abart...@samba.org>
Date:   Thu Aug 9 18:34:48 2012 +1000

    s4-events: Do not vasprintf() the tevent debug messages that will not be 
shown
    
    This malloc() and free() actually shows up quite high on a call profile of
    provision of the AD DC.
    
    Andrew Bartlett

commit 434bed75c43d3d7854bd9433913448810d3ff511
Author: Andrew Bartlett <abart...@samba.org>
Date:   Thu Aug 9 18:34:28 2012 +1000

    s3-events: Do not vasprintf() the tevent debug messages that will not be 
shown
    
    This malloc() and free() actually shows up quite high on a call profile of
    provision of the AD DC (and this is the matching patch for source3).
    
    Andrew Bartlett

commit 299fc7522858e2d7ee6c54310a4e157c8142c74f
Author: Andrew Bartlett <abart...@samba.org>
Date:   Thu Aug 9 19:58:31 2012 +1000

    lib/ldb: Use tdb_exists() rather than tdb_fetch()/talloc_free()
    
    This avoids pulling the record and doing an allocation when we just
    want to know if it exists.
    
    Andrew Bartlett

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

Summary of changes:
 lib/ldb-samba/ldb_wrap.c                           |   12 +++++++-----
 lib/ldb/ABI/{ldb-1.1.6.sigs => ldb-1.1.10.sigs}    |    1 +
 ...yldb-util-1.1.2.sigs => pyldb-util-1.1.10.sigs} |    0
 lib/ldb/common/ldb.c                               |    9 ++++-----
 lib/ldb/common/ldb_debug.c                         |   16 ++++++++++++----
 lib/ldb/include/ldb_module.h                       |    1 +
 lib/ldb/ldb_tdb/ldb_search.c                       |   14 +++++++-------
 lib/ldb/wscript                                    |    2 +-
 source3/lib/events.c                               |   10 ++++++----
 source4/lib/events/tevent_s4.c                     |   10 ++++++----
 10 files changed, 45 insertions(+), 30 deletions(-)
 copy lib/ldb/ABI/{ldb-1.1.6.sigs => ldb-1.1.10.sigs} (99%)
 copy lib/ldb/ABI/{pyldb-util-1.1.2.sigs => pyldb-util-1.1.10.sigs} (100%)


Changeset truncated at 500 lines:

diff --git a/lib/ldb-samba/ldb_wrap.c b/lib/ldb-samba/ldb_wrap.c
index 83a0674..028bd6f 100644
--- a/lib/ldb-samba/ldb_wrap.c
+++ b/lib/ldb-samba/ldb_wrap.c
@@ -47,7 +47,6 @@ static void ldb_wrap_debug(void *context, enum 
ldb_debug_level level,
                           const char *fmt, va_list ap)
 {
        int samba_level = -1;
-       char *s = NULL;
        switch (level) {
        case LDB_DEBUG_FATAL:
                samba_level = 0;
@@ -63,10 +62,13 @@ static void ldb_wrap_debug(void *context, enum 
ldb_debug_level level,
                break;
 
        };
-       vasprintf(&s, fmt, ap);
-       if (!s) return;
-       DEBUG(samba_level, ("ldb: %s\n", s));
-       free(s);
+       if (CHECK_DEBUGLVL(samba_level)) {
+               char *s = NULL;
+               vasprintf(&s, fmt, ap);
+               if (!s) return;
+               DEBUG(samba_level, ("ldb: %s\n", s));
+               free(s);
+       }
 }
 
 
diff --git a/lib/ldb/ABI/ldb-1.1.6.sigs b/lib/ldb/ABI/ldb-1.1.10.sigs
similarity index 99%
copy from lib/ldb/ABI/ldb-1.1.6.sigs
copy to lib/ldb/ABI/ldb-1.1.10.sigs
index f90fa13..de5026e 100644
--- a/lib/ldb/ABI/ldb-1.1.6.sigs
+++ b/lib/ldb/ABI/ldb-1.1.10.sigs
@@ -255,4 +255,5 @@ ldb_val_map_remote: struct ldb_val (struct ldb_module *, 
void *, const struct ld
 ldb_val_string_cmp: int (const struct ldb_val *, const char *)
 ldb_val_to_time: int (const struct ldb_val *, time_t *)
 ldb_valid_attr_name: int (const char *)
+ldb_vdebug: void (struct ldb_context *, enum ldb_debug_level, const char *, 
va_list)
 ldb_wait: int (struct ldb_handle *, enum ldb_wait_type)
diff --git a/lib/ldb/ABI/pyldb-util-1.1.2.sigs 
b/lib/ldb/ABI/pyldb-util-1.1.10.sigs
similarity index 100%
copy from lib/ldb/ABI/pyldb-util-1.1.2.sigs
copy to lib/ldb/ABI/pyldb-util-1.1.10.sigs
diff --git a/lib/ldb/common/ldb.c b/lib/ldb/common/ldb.c
index 779bed8..887a896 100644
--- a/lib/ldb/common/ldb.c
+++ b/lib/ldb/common/ldb.c
@@ -60,7 +60,6 @@ static void ldb_tevent_debug(void *context, enum 
tevent_debug_level level,
 {
        struct ldb_context *ldb = talloc_get_type(context, struct ldb_context);
        enum ldb_debug_level ldb_level = LDB_DEBUG_FATAL;
-       char *s = NULL;
 
        switch (level) {
        case TEVENT_DEBUG_FATAL:
@@ -77,10 +76,10 @@ static void ldb_tevent_debug(void *context, enum 
tevent_debug_level level,
                break;
        };
 
-       vasprintf(&s, fmt, ap);
-       if (!s) return;
-       ldb_debug(ldb, ldb_level, "tevent: %s", s);
-       free(s);
+       /* There isn't a tevent: prefix here because to add it means
+        * actually printing the string, and most of the time we don't
+        * want to show it */
+       ldb_vdebug(ldb, ldb_level, fmt, ap);
 }
 
 /*
diff --git a/lib/ldb/common/ldb_debug.c b/lib/ldb/common/ldb_debug.c
index 6aa58cc..d5e9e7a 100644
--- a/lib/ldb/common/ldb_debug.c
+++ b/lib/ldb/common/ldb_debug.c
@@ -79,11 +79,10 @@ int ldb_set_debug_stderr(struct ldb_context *ldb)
 }
 
 /*
-  log a message
+  log a message (va_list helper for ldb_tevent_debug)
 */
-void ldb_debug(struct ldb_context *ldb, enum ldb_debug_level level, const char 
*fmt, ...)
+void ldb_vdebug(struct ldb_context *ldb, enum ldb_debug_level level, const 
char *fmt, va_list ap)
 {
-       va_list ap;
        if (ldb->debug_ops.debug == NULL) {
                if (ldb->flags & LDB_FLG_ENABLE_TRACING) {
                        ldb_set_debug(ldb, ldb_debug_stderr_all, ldb);
@@ -91,8 +90,17 @@ void ldb_debug(struct ldb_context *ldb, enum ldb_debug_level 
level, const char *
                        ldb_set_debug_stderr(ldb);
                }
        }
-       va_start(ap, fmt);
        ldb->debug_ops.debug(ldb->debug_ops.context, level, fmt, ap);
+}
+
+/*
+  log a message
+*/
+void ldb_debug(struct ldb_context *ldb, enum ldb_debug_level level, const char 
*fmt, ...)
+{
+       va_list ap;
+       va_start(ap, fmt);
+       ldb_vdebug(ldb, level, fmt, ap);
        va_end(ap);
 }
 
diff --git a/lib/ldb/include/ldb_module.h b/lib/ldb/include/ldb_module.h
index 389e8ce..6e14f4c 100644
--- a/lib/ldb/include/ldb_module.h
+++ b/lib/ldb/include/ldb_module.h
@@ -83,6 +83,7 @@ void ldb_debug_set(struct ldb_context *ldb, enum 
ldb_debug_level level,
                   const char *fmt, ...) PRINTF_ATTRIBUTE(3, 4);
 void ldb_debug_add(struct ldb_context *ldb, const char *fmt, ...) 
PRINTF_ATTRIBUTE(2, 3);
 void ldb_debug_end(struct ldb_context *ldb, enum ldb_debug_level level);
+void ldb_vdebug(struct ldb_context *ldb, enum ldb_debug_level level, const 
char *fmt, va_list ap) PRINTF_ATTRIBUTE(3, 0);
 
 #define ldb_error(ldb, ecode, reason) ldb_error_at(ldb, ecode, reason, 
__FILE__, __LINE__)
 #define ldb_module_error(module, ecode, reason) 
ldb_error_at(ldb_module_get_ctx(module), ecode, reason, __FILE__, __LINE__)
diff --git a/lib/ldb/ldb_tdb/ldb_search.c b/lib/ldb/ldb_tdb/ldb_search.c
index 5e20500..e631f7b 100644
--- a/lib/ldb/ldb_tdb/ldb_search.c
+++ b/lib/ldb/ldb_tdb/ldb_search.c
@@ -212,7 +212,8 @@ static int ltdb_search_base(struct ldb_module *module, 
struct ldb_dn *dn)
 {
        void *data = ldb_module_get_private(module);
        struct ltdb_private *ltdb = talloc_get_type(data, struct ltdb_private);
-       TDB_DATA tdb_key, tdb_data;
+       TDB_DATA tdb_key;
+       int exists;
 
        if (ldb_dn_is_null(dn)) {
                return LDB_ERR_NO_SUCH_OBJECT;
@@ -224,14 +225,13 @@ static int ltdb_search_base(struct ldb_module *module, 
struct ldb_dn *dn)
                return LDB_ERR_OPERATIONS_ERROR;
        }
 
-       tdb_data = tdb_fetch(ltdb->tdb, tdb_key);
+       exists = tdb_exists(ltdb->tdb, tdb_key);
        talloc_free(tdb_key.dptr);
-       if (!tdb_data.dptr) {
-               return LDB_ERR_NO_SUCH_OBJECT;
+               
+       if (exists) {
+               return LDB_SUCCESS;
        }
-       
-       free(tdb_data.dptr);
-       return LDB_SUCCESS;
+       return LDB_ERR_NO_SUCH_OBJECT;
 }
 
 /*
diff --git a/lib/ldb/wscript b/lib/ldb/wscript
index 2971842..611eebf 100755
--- a/lib/ldb/wscript
+++ b/lib/ldb/wscript
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 
 APPNAME = 'ldb'
-VERSION = '1.1.9'
+VERSION = '1.1.10'
 
 blddir = 'bin'
 
diff --git a/source3/lib/events.c b/source3/lib/events.c
index 72fd40e..cafe598 100644
--- a/source3/lib/events.c
+++ b/source3/lib/events.c
@@ -434,11 +434,13 @@ static void s3_event_debug(void *context, enum 
tevent_debug_level level,
                break;
 
        };
-       if (vasprintf(&s, fmt, ap) == -1) {
-               return;
+       if (CHECK_DEBUGLVL(samba_level)) {
+               if (vasprintf(&s, fmt, ap) == -1) {
+                       return;
+               }
+               DEBUG(samba_level, ("s3_event: %s", s));
+               free(s);
        }
-       DEBUG(samba_level, ("s3_event: %s", s));
-       free(s);
 }
 
 struct tevent_context *s3_tevent_context_init(TALLOC_CTX *mem_ctx)
diff --git a/source4/lib/events/tevent_s4.c b/source4/lib/events/tevent_s4.c
index 469ed72..6770dd0 100644
--- a/source4/lib/events/tevent_s4.c
+++ b/source4/lib/events/tevent_s4.c
@@ -46,10 +46,12 @@ static void ev_wrap_debug(void *context, enum 
tevent_debug_level level,
                break;
 
        };
-       vasprintf(&s, fmt, ap);
-       if (!s) return;
-       DEBUG(samba_level, ("tevent: %s", s));
-       free(s);
+       if (CHECK_DEBUGLVL(samba_level)) {
+               vasprintf(&s, fmt, ap);
+               if (!s) return;
+               DEBUG(samba_level, ("tevent: %s", s));
+               free(s);
+       }
 }
 
 /*


-- 
Samba Shared Repository

Reply via email to