Commit 70c1334f authored by unknown's avatar unknown
Browse files

Merge tulin@bk-internal.mysql.com:/home/bk/mysql-5.0

into poseidon.ndb.mysql.com:/home/tomas/mysql-5.0

parents af3e6774 c3874f02
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -676,3 +676,6 @@ variable_name
character_set_database
collation_database
skip_show_database
show global status like "Threads_running";
Variable_name	Value
Threads_running	1
+5 −0
Original line number Diff line number Diff line
@@ -354,3 +354,8 @@ show open tables where `table` like "user";
show status variable_name where variable_name like "%database%";
# test for 'show variables ... where'
show variables variable_name where variable_name like "%database%";

#
# Bug #7981:SHOW GLOBAL STATUS crashes server
#
show global status like "Threads_running";
+11 −30
Original line number Diff line number Diff line
@@ -1534,25 +1534,6 @@ static bool show_status_array(THD *thd, const char *wild,
}


bool mysqld_show(THD *thd, const char *wild, show_var_st *variables,
                 enum enum_var_type value_type,
                 pthread_mutex_t *mutex,
                 struct system_status_var *status_var, TABLE *table)
{
  DBUG_ENTER("mysqld_show");
  ha_update_statistics();                    /* Export engines statistics */
  pthread_mutex_lock(mutex);
  if (show_status_array(thd, wild, variables, value_type, status_var, "", table))
    goto err;
  pthread_mutex_unlock(mutex);
  DBUG_RETURN(FALSE);

 err:
  pthread_mutex_unlock(mutex);
  DBUG_RETURN(TRUE);
}


/* collect status for all running threads */

void calc_sum_of_all_status(STATUS_VAR *to)
@@ -2874,10 +2855,13 @@ int fill_open_tables(THD *thd, TABLE_LIST *tables, COND *cond)
int fill_variables(THD *thd, TABLE_LIST *tables, COND *cond)
{
  DBUG_ENTER("fill_variables");
  int res= 0;
  LEX *lex= thd->lex;
  const char *wild= lex->wild ? lex->wild->ptr() : NullS;
  int res= mysqld_show(thd, wild, init_vars, lex->option_type,
                       &LOCK_global_system_variables, 0, tables->table);
  pthread_mutex_lock(&LOCK_global_system_variables);
  res= show_status_array(thd, wild, init_vars, 
                         lex->option_type, 0, "", tables->table);
  pthread_mutex_unlock(&LOCK_global_system_variables);
  DBUG_RETURN(res);
}

@@ -2889,16 +2873,13 @@ int fill_status(THD *thd, TABLE_LIST *tables, COND *cond)
  const char *wild= lex->wild ? lex->wild->ptr() : NullS;
  int res= 0;
  STATUS_VAR tmp;

  if (lex->option_type == OPT_GLOBAL)
  {
  ha_update_statistics();                    /* Export engines statistics */
  pthread_mutex_lock(&LOCK_status);
  if (lex->option_type == OPT_GLOBAL)
    calc_sum_of_all_status(&tmp);
  }
  res= mysqld_show(thd, wild, status_vars, OPT_GLOBAL, &LOCK_status,
  res= show_status_array(thd, wild, status_vars, OPT_GLOBAL,
                         (lex->option_type == OPT_GLOBAL ? 
                    &tmp: &thd->status_var), tables->table);
  if (lex->option_type == OPT_GLOBAL)
                          &tmp: &thd->status_var), "",tables->table);
  pthread_mutex_unlock(&LOCK_status);
  DBUG_RETURN(res);
}