diff options
author | unknown <sasha@mysql.sashanet.com> | 2002-03-26 22:19:23 -0700 |
---|---|---|
committer | unknown <sasha@mysql.sashanet.com> | 2002-03-26 22:19:23 -0700 |
commit | 079a551ca735e79f3d7a2ebbecf8be4d4ba7608a (patch) | |
tree | ab4d73690dcb8e3ef54e70015f1838cf17a2577a /dbug/dbug.c | |
parent | 9c435716a9773f78cd5db0a992bd4b89b83bc25a (diff) | |
download | mariadb-git-079a551ca735e79f3d7a2ebbecf8be4d4ba7608a.tar.gz |
coverted my_thread_init() /end to use my_malloc()/my_free() to help track
down replication corruption
dbug/dbug.c:
fixed DBUG_ macros to not crash if my_thread_init() had not been called
include/my_sys.h:
keep track of shutdown, main, and signal threads for safemalloc
mysys/my_static.h:
keep track of thread in safemalloc blocks
mysys/my_thr_init.c:
use my_malloc()/my_free() in my_thread_init()
mysys/safemalloc.c:
keep track of threads
do not fuss if main,signal, or shutdown thread still has allocated blocks
when we call TERMINATE() as some blocks are freed later and there is no
easy way to make TERMINATE() wait for those threads
sql/mysqld.cc:
keep track of signal, main, and shutdown threads
Diffstat (limited to 'dbug/dbug.c')
-rw-r--r-- | dbug/dbug.c | 28 |
1 files changed, 22 insertions, 6 deletions
diff --git a/dbug/dbug.c b/dbug/dbug.c index 9e1e51d2404..8f214bfbe7c 100644 --- a/dbug/dbug.c +++ b/dbug/dbug.c @@ -21,7 +21,8 @@ * all copies and derivative works. Thank you. * * * * The author makes no warranty of any kind with respect to this * - * product and explicitly disclaims any implied warranties of mer- * + * product and explicitly disclaims any implied warranties of mer- *ct_lex.table_list.first=0; + thd->lex.selec * chantability or fitness for any particular purpose. * * * ****************************************************************************** @@ -58,7 +59,7 @@ * seismo!bpa!sjuvax!bbanerje * * Michael Widenius: - * DBUG_DUMP - To dump a pice of memory. + * DBUG_DUMP - To dump a block of memory. * PUSH_FLAG "O" - To be used insted of "o" if we don't * want flushing (for slow systems) * PUSH_FLAG "A" - as 'O', but we will append to the out file instead @@ -707,7 +708,13 @@ char ***_sframep_ __attribute__((unused))) int save_errno=errno; if (!init_done) _db_push_ (_DBUG_START_CONDITION_); - state=code_state(); + /* Sasha: the test below is so we could call functions with DBUG_ENTER + before my_thread_init(). I needed this because I suspected corruption + of a block allocated by my_thread_init() itself, so I wanted to use + my_malloc()/my_free() in my_thread_init()/my_thread_end() + */ + if (!(state=code_state())) + return; *_sfunc_ = state->func; *_sfile_ = state->file; @@ -855,6 +862,9 @@ uint _line_, const char *keyword) { CODE_STATE *state=code_state(); + /* Sasha: pre-my_thread_init() safety */ + if (!state) + return; state->u_line = _line_; state->u_keyword = (char*) keyword; } @@ -890,7 +900,9 @@ void _db_doprnt_ (const char *format,...) { va_list args; CODE_STATE *state; - state=code_state(); + /* Sasha: pre-my_thread_init() safety */ + if (!(state=code_state())) + return; va_start(args,format); @@ -942,7 +954,9 @@ uint length) int pos; char dbuff[90]; CODE_STATE *state; - state=code_state(); + /* Sasha: pre-my_thread_init() safety */ + if (!(state=code_state())) + return; if (_db_keyword_ ((char*) keyword)) { @@ -1224,7 +1238,9 @@ const char *keyword) if (!init_done) _db_push_ (""); - state=code_state(); + /* Sasha: pre-my_thread_init() safety */ + if (!(state=code_state())) + return FALSE; result = FALSE; if (DEBUGGING && state->level <= stack -> maxdepth && |