mirror of
https://github.com/MariaDB/server.git
synced 2025-01-18 04:53:01 +01:00
Fixed rare bug in show processlist which could cause core dump if a new thread was connecting.
This commit is contained in:
parent
82a9669267
commit
c1b233ec55
2 changed files with 9 additions and 5 deletions
|
@ -1025,6 +1025,7 @@ void mysqld_list_processes(THD *thd,const char *user, bool verbose)
|
|||
THD *tmp;
|
||||
while ((tmp=it++))
|
||||
{
|
||||
struct st_my_thread_var *mysys_var;
|
||||
if ((tmp->net.vio || tmp->system_thread) &&
|
||||
(!user || (tmp->user && !strcmp(tmp->user,user))))
|
||||
{
|
||||
|
@ -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 ?
|
||||
"system user" : "unauthenticated user"));
|
||||
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
|
||||
thd_info->db=thd->strdup(thd_info->db);
|
||||
thd_info->command=(int) tmp->command;
|
||||
if (tmp->mysys_var)
|
||||
pthread_mutex_lock(&tmp->mysys_var->mutex);
|
||||
if ((mysys_var= tmp->mysys_var))
|
||||
pthread_mutex_lock(&mysys_var->mutex);
|
||||
thd_info->proc_info= (char*) (tmp->killed ? "Killed" : 0);
|
||||
thd_info->state_info= (char*) (tmp->locked ? "Locked" :
|
||||
tmp->net.reading_or_writing ?
|
||||
|
@ -1051,8 +1053,8 @@ void mysqld_list_processes(THD *thd,const char *user, bool verbose)
|
|||
tmp->mysys_var &&
|
||||
tmp->mysys_var->current_cond ?
|
||||
"Waiting on cond" : NullS);
|
||||
if (tmp->mysys_var)
|
||||
pthread_mutex_unlock(&tmp->mysys_var->mutex);
|
||||
if (mysys_var)
|
||||
pthread_mutex_unlock(&mysys_var->mutex);
|
||||
|
||||
#if !defined(DONT_USE_THR_ALARM) && ! defined(SCO)
|
||||
if (pthread_kill(tmp->real_id,0))
|
||||
|
|
|
@ -204,6 +204,8 @@ void udf_init()
|
|||
new_thd->version--; // Force close to free memory
|
||||
close_thread_tables(new_thd);
|
||||
delete new_thd;
|
||||
/* Remember that we don't have a THD */
|
||||
my_pthread_setspecific_ptr(THR_THD, 0);
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue