diff options
-rw-r--r-- | dbug/dbug.c | 45 | ||||
-rw-r--r-- | dbug/user.r | 5 | ||||
-rw-r--r-- | mysql-test/r/variables_debug.result | 12 | ||||
-rw-r--r-- | mysql-test/t/disabled.def | 1 | ||||
-rw-r--r-- | mysql-test/t/variables_debug.test | 12 | ||||
-rw-r--r-- | mysys/my_thr_init.c | 1 | ||||
-rw-r--r-- | sql/set_var.cc | 6 |
7 files changed, 65 insertions, 17 deletions
diff --git a/dbug/dbug.c b/dbug/dbug.c index 7f4292d18b1..666ab2b3e3c 100644 --- a/dbug/dbug.c +++ b/dbug/dbug.c @@ -412,15 +412,11 @@ void _db_process_(const char *name) cs->process= name; } + /* * FUNCTION * - * _db_set_ set current debugger settings - * - * SYNOPSIS - * - * VOID _db_set_(control) - * char *control; + * DbugParse parse control string and set current debugger setting * * DESCRIPTION * @@ -444,7 +440,7 @@ void _db_process_(const char *name) * */ -void _db_set_(CODE_STATE *cs, const char *control) +static void DbugParse(CODE_STATE *cs, const char *control) { const char *end; int rel=0; @@ -674,6 +670,35 @@ void _db_set_(CODE_STATE *cs, const char *control) /* * FUNCTION * + * _db_set_ set current debugger settings + * + * SYNOPSIS + * + * VOID _db_set_(control) + * char *control; + * + * DESCRIPTION + * + * Given pointer to a debug control string in "control", + * parses the control string, and sets up a current debug + * settings. Pushes a new debug settings if the current is + * set to the initial debugger settings. + */ + +void _db_set_(CODE_STATE *cs, const char *control) +{ + get_code_state_or_return; + + if (cs->stack == &init_settings) + PushState(cs); + + DbugParse(cs, control); +} + + +/* + * FUNCTION + * * _db_push_ push current debugger settings and set up new one * * SYNOPSIS @@ -685,7 +710,7 @@ void _db_set_(CODE_STATE *cs, const char *control) * * Given pointer to a debug control string in "control", pushes * the current debug settings, parses the control string, and sets - * up a new debug settings with _db_set_() + * up a new debug settings with DbugParse() * */ @@ -694,7 +719,7 @@ void _db_push_(const char *control) CODE_STATE *cs=0; get_code_state_or_return; PushState(cs); - _db_set_(cs, control); + DbugParse(cs, control); } /* @@ -717,7 +742,7 @@ void _db_set_init_(const char *control) CODE_STATE tmp_cs; bzero((uchar*) &tmp_cs, sizeof(tmp_cs)); tmp_cs.stack= &init_settings; - _db_set_(&tmp_cs, control); + DbugParse(&tmp_cs, control); } /* diff --git a/dbug/user.r b/dbug/user.r index e41367de321..19de840d0ad 100644 --- a/dbug/user.r +++ b/dbug/user.r @@ -730,8 +730,9 @@ warning will be given. The DBUG_POP macro has no arguments. EX:\ \fCDBUG_POP\ ();\fR .SP 1 .LI DBUG_SET\ -Modifies the current debugger state on top of the stack using the -debug control string passed as the macro argument. Unless +Modifies the current debugger state on top of the stack or pushes +a new state if the current is set to the initial settings, using +the debug control string passed as the macro argument. Unless .I incremental control string is used (see below), it's equivalent to a combination of DBUG_POP and DBUG_PUSH. diff --git a/mysql-test/r/variables_debug.result b/mysql-test/r/variables_debug.result new file mode 100644 index 00000000000..9cd133dddb1 --- /dev/null +++ b/mysql-test/r/variables_debug.result @@ -0,0 +1,12 @@ +set debug= 'T'; +select @@debug; +@@debug +T +set debug= '+P'; +select @@debug; +@@debug +P:T +set debug= '-P'; +select @@debug; +@@debug +T diff --git a/mysql-test/t/disabled.def b/mysql-test/t/disabled.def index 670a9c6a755..9309d668a15 100644 --- a/mysql-test/t/disabled.def +++ b/mysql-test/t/disabled.def @@ -22,4 +22,3 @@ wait_timeout : Bug#32801 wait_timeout.test fails randomly ctype_create : Bug#32965 main.ctype_create fails status : Bug#32966 main.status fails ps_ddl : Bug#12093 2007-12-14 pending WL#4165 / WL#4166 -query_cache_debug : Bug#34424: query_cache_debug.test leads to valgrind warnings diff --git a/mysql-test/t/variables_debug.test b/mysql-test/t/variables_debug.test new file mode 100644 index 00000000000..7dcaf246803 --- /dev/null +++ b/mysql-test/t/variables_debug.test @@ -0,0 +1,12 @@ +--source include/have_debug.inc + +# +# Bug#34678 @@debug variable's incremental mode +# + +set debug= 'T'; +select @@debug; +set debug= '+P'; +select @@debug; +set debug= '-P'; +select @@debug; diff --git a/mysys/my_thr_init.c b/mysys/my_thr_init.c index 1ba6e5ac92d..933674fa007 100644 --- a/mysys/my_thr_init.c +++ b/mysys/my_thr_init.c @@ -332,6 +332,7 @@ void my_thread_end(void) /* tmp->dbug is allocated inside DBUG library */ if (tmp->dbug) { + DBUG_POP(); free(tmp->dbug); tmp->dbug=0; } diff --git a/sql/set_var.cc b/sql/set_var.cc index 4c77cbfff82..64c79ed3bb3 100644 --- a/sql/set_var.cc +++ b/sql/set_var.cc @@ -3926,10 +3926,8 @@ bool sys_var_thd_dbug::update(THD *thd, set_var *var) if (var->type == OPT_GLOBAL) DBUG_SET_INITIAL(var ? var->value->str_value.c_ptr() : ""); else - { - DBUG_POP(); - DBUG_PUSH(var ? var->value->str_value.c_ptr() : ""); - } + DBUG_SET(var ? var->value->str_value.c_ptr() : ""); + return 0; } |