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