summaryrefslogtreecommitdiff
path: root/dbug
diff options
context:
space:
mode:
authorMarko Mäkelä <marko.makela@mariadb.com>2017-01-03 15:38:09 +0200
committerMarko Mäkelä <marko.makela@mariadb.com>2017-01-05 10:51:18 +0200
commitbf35deda09f18f5c7f3179ace731a2a186e05445 (patch)
tree3588ee94c8cee94e6abf50a2d14e79a1234c424e /dbug
parent4e7b382d3132e6be0e597d19d6467a9f58b459a7 (diff)
downloadmariadb-git-bf35deda09f18f5c7f3179ace731a2a186e05445.tar.gz
MDEV-11713 Optimize DBUG_PRINT and introduce DBUG_LOG
MariaDB Server is unnecessarily evaluating the arguments of DBUG_PRINT() macros when the label is not defined. The macro DBUG_LOG() for C++ operator<< output which was added for InnoDB diagnostics in MySQL 5.7 is missing from MariaDB. Unlike the MySQL 5.7 implementation, MariaDB will avoid allocating and initializing the output string when the label is not defined. Introduce DBUG_OUT("crypt") and DBUG_OUT("checksum") for some InnoDB diagnostics, replacing some use of ib::info().
Diffstat (limited to 'dbug')
-rw-r--r--dbug/dbug.c35
1 files changed, 17 insertions, 18 deletions
diff --git a/dbug/dbug.c b/dbug/dbug.c
index b2b298beb09..048e4803b1a 100644
--- a/dbug/dbug.c
+++ b/dbug/dbug.c
@@ -1213,7 +1213,7 @@ void _db_return_(struct _db_stack_frame_ *_stack_frame_)
*
* SYNOPSIS
*
- * VOID _db_pargs_(_line_, keyword)
+ * int _db_pargs_(_line_, keyword)
* int _line_;
* char *keyword;
*
@@ -1226,12 +1226,14 @@ void _db_return_(struct _db_stack_frame_ *_stack_frame_)
*
*/
-void _db_pargs_(uint _line_, const char *keyword)
+int _db_pargs_(uint _line_, const char *keyword)
{
CODE_STATE *cs;
- get_code_state_or_return;
+ get_code_state_or_return 0;
cs->u_line= _line_;
cs->u_keyword= keyword;
+
+ return DEBUGGING && _db_keyword_(cs, cs->u_keyword, 0);
}
@@ -1265,27 +1267,24 @@ void _db_doprnt_(const char *format,...)
{
va_list args;
CODE_STATE *cs;
+ int save_errno;
+
get_code_state_or_return;
va_start(args,format);
if (!cs->locked)
pthread_mutex_lock(&THR_LOCK_dbug);
- if (_db_keyword_(cs, cs->u_keyword, 0))
- {
- int save_errno=errno;
- DoPrefix(cs, cs->u_line);
- if (TRACING)
- Indent(cs, cs->level + 1);
- else
- (void) fprintf(cs->stack->out_file->file, "%s: ", cs->func);
- (void) fprintf(cs->stack->out_file->file, "%s: ", cs->u_keyword);
- DbugVfprintf(cs->stack->out_file->file, format, args);
- DbugFlush(cs);
- errno=save_errno;
- }
- else if (!cs->locked)
- pthread_mutex_unlock(&THR_LOCK_dbug);
+ save_errno=errno;
+ DoPrefix(cs, cs->u_line);
+ if (TRACING)
+ Indent(cs, cs->level + 1);
+ else
+ (void) fprintf(cs->stack->out_file->file, "%s: ", cs->func);
+ (void) fprintf(cs->stack->out_file->file, "%s: ", cs->u_keyword);
+ DbugVfprintf(cs->stack->out_file->file, format, args);
+ DbugFlush(cs);
+ errno=save_errno;
va_end(args);
}