Commit f3b563df authored by unknown's avatar unknown

Fixed rare bug in show processlist which could cause core dump if a new thread was connecting.


sql/sql_show.cc:
  Fixed rare bug in show processlist which could cause core dump if a new thread was connecting.
  (We where calling mutex_unlock() without having ever called mutex_lock)
sql/sql_udf.cc:
  Fixed warning from valgrind
parent 491415cd
...@@ -1025,6 +1025,7 @@ void mysqld_list_processes(THD *thd,const char *user, bool verbose) ...@@ -1025,6 +1025,7 @@ void mysqld_list_processes(THD *thd,const char *user, bool verbose)
THD *tmp; THD *tmp;
while ((tmp=it++)) while ((tmp=it++))
{ {
struct st_my_thread_var *mysys_var;
if ((tmp->net.vio || tmp->system_thread) && if ((tmp->net.vio || tmp->system_thread) &&
(!user || (tmp->user && !strcmp(tmp->user,user)))) (!user || (tmp->user && !strcmp(tmp->user,user))))
{ {
...@@ -1034,12 +1035,13 @@ void mysqld_list_processes(THD *thd,const char *user, bool verbose) ...@@ -1034,12 +1035,13 @@ void mysqld_list_processes(THD *thd,const char *user, bool verbose)
thd_info->user=thd->strdup(tmp->user ? tmp->user : (tmp->system_thread ? thd_info->user=thd->strdup(tmp->user ? tmp->user : (tmp->system_thread ?
"system user" : "unauthenticated user")); "system user" : "unauthenticated user"));
thd_info->host=thd->strdup(tmp->host ? tmp->host : (tmp->ip ? tmp->ip : thd_info->host=thd->strdup(tmp->host ? tmp->host : (tmp->ip ? tmp->ip :
(tmp->system_thread ? "none" : "connecting host"))); (tmp->system_thread ? "none" :
"connecting host")));
if ((thd_info->db=tmp->db)) // Safe test if ((thd_info->db=tmp->db)) // Safe test
thd_info->db=thd->strdup(thd_info->db); thd_info->db=thd->strdup(thd_info->db);
thd_info->command=(int) tmp->command; thd_info->command=(int) tmp->command;
if (tmp->mysys_var) if ((mysys_var= tmp->mysys_var))
pthread_mutex_lock(&tmp->mysys_var->mutex); pthread_mutex_lock(&mysys_var->mutex);
thd_info->proc_info= (char*) (tmp->killed ? "Killed" : 0); thd_info->proc_info= (char*) (tmp->killed ? "Killed" : 0);
thd_info->state_info= (char*) (tmp->locked ? "Locked" : thd_info->state_info= (char*) (tmp->locked ? "Locked" :
tmp->net.reading_or_writing ? tmp->net.reading_or_writing ?
...@@ -1051,8 +1053,8 @@ void mysqld_list_processes(THD *thd,const char *user, bool verbose) ...@@ -1051,8 +1053,8 @@ void mysqld_list_processes(THD *thd,const char *user, bool verbose)
tmp->mysys_var && tmp->mysys_var &&
tmp->mysys_var->current_cond ? tmp->mysys_var->current_cond ?
"Waiting on cond" : NullS); "Waiting on cond" : NullS);
if (tmp->mysys_var) if (mysys_var)
pthread_mutex_unlock(&tmp->mysys_var->mutex); pthread_mutex_unlock(&mysys_var->mutex);
#if !defined(DONT_USE_THR_ALARM) && ! defined(SCO) #if !defined(DONT_USE_THR_ALARM) && ! defined(SCO)
if (pthread_kill(tmp->real_id,0)) if (pthread_kill(tmp->real_id,0))
......
...@@ -204,6 +204,8 @@ void udf_init() ...@@ -204,6 +204,8 @@ void udf_init()
new_thd->version--; // Force close to free memory new_thd->version--; // Force close to free memory
close_thread_tables(new_thd); close_thread_tables(new_thd);
delete new_thd; delete new_thd;
/* Remember that we don't have a THD */
my_pthread_setspecific_ptr(THR_THD, 0);
DBUG_VOID_RETURN; DBUG_VOID_RETURN;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment