Commit 69bce9c6 authored by unknown's avatar unknown
Browse files

More debugging

Print position in normal log for Binlog dump


dbug/dbug.c:
  Added DBUG_OUTPUT() to temporary start/stop trace-file output
  Optimized alignment of CODE_STATE structure
include/my_dbug.h:
  Added DBUG_OUTPUT() to temporary start/stop trace-file output
sql/field.cc:
  Safety fix when used with future 5.0 .frm tables
sql/log.cc:
  More debugging
sql/mysqld.cc:
  Fixed type
sql/slave.cc:
  Fixed wrong cast (not a bug)
sql/sql_class.h:
  More DBUG output
sql/sql_parse.cc:
  Print position in normal log for Binlog dump
parent 977fef31
Loading
Loading
Loading
Loading
+41 −15
Original line number Diff line number Diff line
@@ -227,14 +227,15 @@ static my_bool init_done = FALSE; /* Set to TRUE when initialization done */
static struct state *stack=0;

typedef struct st_code_state {
  int lineno;			/* Current debugger output line number */
  int level;			/* Current function nesting level */
  const char *func;		/* Name of current user function */
  const char *file;		/* Name of current user file */
  char **framep;		/* Pointer to current frame */
  int jmplevel;			/* Remember nesting level at setjmp () */
  const char *jmpfunc;		/* Remember current function for setjmp */
  const char *jmpfile;		/* Remember current file for setjmp */
  int lineno;			/* Current debugger output line number */
  int level;			/* Current function nesting level */
  int disable_output;		/* Set to it if output is disabled */
  int jmplevel;			/* Remember nesting level at setjmp () */

/*
 *	The following variables are used to hold the state information
@@ -247,8 +248,8 @@ typedef struct st_code_state {
 */

  uint u_line;			/* User source code line number */
  const char *u_keyword;	/* Keyword for current macro */
  int  locked;			/* If locked with _db_lock_file */
  const char *u_keyword;	/* Keyword for current macro */
} CODE_STATE;

	/* Parse a debug command string */
@@ -370,8 +371,10 @@ static CODE_STATE *code_state(void)
#define code_state() (&static_code_state)
#define pthread_mutex_lock(A) {}
#define pthread_mutex_unlock(A) {}
static CODE_STATE  static_code_state = { 0,0,"?func","?file",NULL,0,NULL,
					 NULL,0,"?",0};
static CODE_STATE static_code_state=
{
  "?func", "?file", NULL, NullS, NullS, 0,0,0,0,0,0, NullS
};
#endif


@@ -728,9 +731,12 @@ char ***_sframep_ __attribute__((unused)))
    if (DoProfile ())
    {
      long stackused;
      if (*state->framep == NULL) {
      if (*state->framep == NULL)
      {
	stackused = 0;
      } else {
      }
      else
      {
	stackused = ((long)(*state->framep)) - ((long)(state->framep));
	stackused = stackused > 0 ? stackused : -stackused;
      }
@@ -754,7 +760,7 @@ char ***_sframep_ __attribute__((unused)))
      dbug_flush (state);			/* This does a unlock */
    }
#ifdef SAFEMALLOC
    if (stack -> flags & SANITY_CHECK_ON)
    if (stack->flags & SANITY_CHECK_ON && !state->disable_output)
      if (_sanity(_file_,_line_))		/* Check of safemalloc */
	stack -> flags &= ~SANITY_CHECK_ON;
#endif
@@ -809,9 +815,11 @@ uint *_slevel_)
      else
      {
#ifdef SAFEMALLOC
	if (stack -> flags & SANITY_CHECK_ON)
	if (stack->flags & SANITY_CHECK_ON && !state->disable_output)
        {
	  if (_sanity(*_sfile_,_line_))
	    stack->flags &= ~SANITY_CHECK_ON;
        }
#endif
#ifndef THREAD
	if (DoProfile ())
@@ -954,7 +962,6 @@ uint length)
  int pos;
  char dbuff[90];
  CODE_STATE *state;
  /* Sasha: pre-my_thread_init() safety */
  if (!(state=code_state()))
    return;

@@ -994,6 +1001,25 @@ uint length)
  }
}


/*
  Enable/Disable output for this thread

  SYNOPSIS
    _db_output_()
    flag		1 = enable output, 0 = disable_output

*/

void _db_output_(uint flag)
{
  CODE_STATE *state;
  if (!(state=code_state()))
    return;
  state->disable_output= !flag;
}


/*
 *  FUNCTION
 *
@@ -1159,7 +1185,7 @@ static BOOLEAN DoTrace (CODE_STATE *state)
{
  reg2 BOOLEAN trace=FALSE;

  if (TRACING &&
  if (TRACING && !state->disable_output &&
      state->level <= stack -> maxdepth &&
      InList (stack -> functions, state->func) &&
      InList (stack -> processes, _db_process_))
@@ -1195,7 +1221,7 @@ static BOOLEAN DoProfile ()
  state=code_state();

  profile = FALSE;
  if (PROFILING &&
  if (PROFILING && !state->disable_output &&
      state->level <= stack -> maxdepth &&
      InList (stack -> p_functions, state->func) &&
      InList (stack -> processes, _db_process_))
@@ -1242,7 +1268,7 @@ const char *keyword)
  if (!(state=code_state()))
    return FALSE;
  result = FALSE;
  if (DEBUGGING &&
  if (DEBUGGING && !state->disable_output &&
      state->level <= stack -> maxdepth &&
      InList (stack -> functions, state->func) &&
      InList (stack -> keywords, keyword) &&
+3 −0
Original line number Diff line number Diff line
@@ -38,6 +38,7 @@ extern void _db_pargs_(uint _line_,const char *keyword);
extern	void _db_doprnt_ _VARARGS((const char *format,...));
extern	void _db_dump_(uint _line_,const char *keyword,const char *memory,
		       uint length);
extern	void _db_output_();
extern	void _db_lock_file();
extern	void _db_unlock_file();

@@ -66,6 +67,7 @@ extern void _db_unlock_file();
#define DEBUGGER_ON  _no_db_=0
#define DBUG_LOCK_FILE { _db_lock_file(); }
#define DBUG_UNLOCK_FILE { _db_unlock_file(); }
#define DBUG_OUTPUT(A) { _db_output_(A); }
#define DBUG_ASSERT(A) assert(A)
#else						/* No debugger */

@@ -86,6 +88,7 @@ extern void _db_unlock_file();
#define DEBUGGER_ON
#define DBUG_LOCK_FILE
#define DBUG_UNLOCK_FILE
#define DBUG_OUTPUT(A)
#define DBUG_ASSERT(A) {}
#endif
#ifdef	__cplusplus
+8 −2
Original line number Diff line number Diff line
@@ -5941,8 +5941,14 @@ Field *make_field(char *ptr, uint32 field_length,
  if (f_is_alpha(pack_flag))
  {
    if (!f_is_packed(pack_flag))
    {
      if (field_type == FIELD_TYPE_STRING ||
          field_type == FIELD_TYPE_VAR_STRING)
        return new Field_string(ptr,field_length,null_pos,null_bit,
			      unireg_check, field_name, table, field_charset);
                                unireg_check, field_name, table,
                                field_charset);
      return 0;                                 // Error
    }

    uint pack_length=calc_pack_length((enum_field_types)
				      f_packtype(pack_flag),
+23 −9
Original line number Diff line number Diff line
@@ -1703,6 +1703,8 @@ bool MYSQL_LOG::write(THD *thd,const char *query, uint query_length,
  time_t current_time;
  if (!is_open())
    return 0;
  DBUG_ENTER("MYSQL_LOG::write");

  VOID(pthread_mutex_lock(&LOCK_log));
  if (is_open())
  {						// Safety agains reopen
@@ -1712,7 +1714,7 @@ bool MYSQL_LOG::write(THD *thd,const char *query, uint query_length,
    if (!(thd->options & OPTION_UPDATE_LOG))
    {
      VOID(pthread_mutex_unlock(&LOCK_log));
      return 0;
      DBUG_RETURN(0);
    }
    if (!(specialflag & SPECIAL_SHORT_LOG_FORMAT) || query_start_arg)
    {
@@ -1812,7 +1814,7 @@ bool MYSQL_LOG::write(THD *thd,const char *query, uint query_length,
    }
  }
  VOID(pthread_mutex_unlock(&LOCK_log));
  return error;
  DBUG_RETURN(error);
}


@@ -1834,14 +1836,17 @@ bool MYSQL_LOG::write(THD *thd,const char *query, uint query_length,

void MYSQL_LOG::wait_for_update(THD* thd, bool master_or_slave)
{
  const char* old_msg = thd->enter_cond(&update_cond, &LOCK_log,
  const char *old_msg;
  DBUG_ENTER("wait_for_update");
  old_msg= thd->enter_cond(&update_cond, &LOCK_log,
                           master_or_slave ?
                                        "Has read all relay log; waiting for \
the slave I/O thread to update it" : 
                                        "Has sent all binlog to slave; \
waiting for binlog to be updated"); 
                           "Has read all relay log; waiting for the slave I/O "
                           "thread to update it" : 
                           "Has sent all binlog to slave; waiting for binlog "
                           "to be updated"); 
  pthread_cond_wait(&update_cond, &LOCK_log);
  thd->exit_cond(old_msg);
  DBUG_VOID_RETURN;
}


@@ -2198,6 +2203,15 @@ void MYSQL_LOG::report_pos_in_innodb()
  DBUG_VOID_RETURN;
}


void MYSQL_LOG::signal_update()
{
  DBUG_ENTER("MYSQL_LOG::signal_update");
  pthread_cond_broadcast(&update_cond);
  DBUG_VOID_RETURN;
}


#ifdef __NT__
void print_buffer_to_nt_eventlog(enum loglevel level, char *buff,
                                 uint length, int buffLen)
+1 −1
Original line number Diff line number Diff line
@@ -540,7 +540,7 @@ static void close_connections(void)
    struct timespec abstime;
    int error;
    LINT_INIT(error);
    DBUG_PRINT("info",("Waiting for select_thread"));
    DBUG_PRINT("info",("Waiting for select thread"));

#ifndef DONT_USE_THR_ALARM
    if (pthread_kill(select_thread,THR_CLIENT_ALARM))
Loading