Commit e022dde3 authored by Monty's avatar Monty

Cleanups and fixes

- Added missing delete thd in bootstrap()
- Delete wrong 'delete thd' in start_wsrep_THD()
- Added missing 'delete thd' in case of SCHEDULER_ONE_THREAD_PER_CONNECTION
- Delete wrong dec_thread_running() in destroy_thd() as it caused thread_running
  to be wrong.
- Moved reset_killed() to a normal function to make it easier to debug
- Added check of mutex in wsrep_aborting_thd... functions
parent 4cb1a4fe
...@@ -6396,6 +6396,7 @@ static void bootstrap(MYSQL_FILE *file) ...@@ -6396,6 +6396,7 @@ static void bootstrap(MYSQL_FILE *file)
sql_print_warning("Can't create thread to handle bootstrap (errno= %d)", sql_print_warning("Can't create thread to handle bootstrap (errno= %d)",
error); error);
bootstrap_error=-1; bootstrap_error=-1;
delete thd;
DBUG_VOID_RETURN; DBUG_VOID_RETURN;
} }
/* Wait for thread to die */ /* Wait for thread to die */
......
...@@ -2067,6 +2067,23 @@ int THD::killed_errno() ...@@ -2067,6 +2067,23 @@ int THD::killed_errno()
} }
void THD::reset_killed()
{
/*
Resetting killed has to be done under a mutex to ensure
its not done during an awake() call.
*/
DBUG_ENTER("reset_killed");
if (killed != NOT_KILLED)
{
mysql_mutex_lock(&LOCK_thd_kill);
killed= NOT_KILLED;
killed_err= 0;
mysql_mutex_unlock(&LOCK_thd_kill);
}
DBUG_VOID_RETURN;
}
/* /*
Remember the location of thread info, the structure needed for Remember the location of thread info, the structure needed for
the structure for the net buffer the structure for the net buffer
...@@ -4630,7 +4647,6 @@ void destroy_thd(MYSQL_THD thd) ...@@ -4630,7 +4647,6 @@ void destroy_thd(MYSQL_THD thd)
thd->add_status_to_global(); thd->add_status_to_global();
unlink_not_visible_thd(thd); unlink_not_visible_thd(thd);
delete thd; delete thd;
dec_thread_running();
} }
void reset_thd(MYSQL_THD thd) void reset_thd(MYSQL_THD thd)
......
...@@ -3737,20 +3737,7 @@ class THD :public Statement, ...@@ -3737,20 +3737,7 @@ class THD :public Statement,
} }
} }
int killed_errno(); int killed_errno();
inline void reset_killed() void reset_killed();
{
/*
Resetting killed has to be done under a mutex to ensure
its not done during an awake() call.
*/
if (killed != NOT_KILLED)
{
mysql_mutex_lock(&LOCK_thd_kill);
killed= NOT_KILLED;
killed_err= 0;
mysql_mutex_unlock(&LOCK_thd_kill);
}
}
inline void reset_kill_query() inline void reset_kill_query()
{ {
if (killed < KILL_CONNECTION) if (killed < KILL_CONNECTION)
......
...@@ -1935,7 +1935,6 @@ pthread_handler_t start_wsrep_THD(void *arg) ...@@ -1935,7 +1935,6 @@ pthread_handler_t start_wsrep_THD(void *arg)
close_connection(thd, ER_OUT_OF_RESOURCES); close_connection(thd, ER_OUT_OF_RESOURCES);
statistic_increment(aborted_connects,&LOCK_status); statistic_increment(aborted_connects,&LOCK_status);
MYSQL_CALLBACK(thread_scheduler, end_thread, (thd, 0)); MYSQL_CALLBACK(thread_scheduler, end_thread, (thd, 0));
goto error; goto error;
} }
...@@ -1958,7 +1957,6 @@ pthread_handler_t start_wsrep_THD(void *arg) ...@@ -1958,7 +1957,6 @@ pthread_handler_t start_wsrep_THD(void *arg)
close_connection(thd, ER_OUT_OF_RESOURCES); close_connection(thd, ER_OUT_OF_RESOURCES);
statistic_increment(aborted_connects,&LOCK_status); statistic_increment(aborted_connects,&LOCK_status);
MYSQL_CALLBACK(thread_scheduler, end_thread, (thd, 0)); MYSQL_CALLBACK(thread_scheduler, end_thread, (thd, 0));
delete thd;
goto error; goto error;
} }
...@@ -2002,13 +2000,8 @@ pthread_handler_t start_wsrep_THD(void *arg) ...@@ -2002,13 +2000,8 @@ pthread_handler_t start_wsrep_THD(void *arg)
// at server shutdown // at server shutdown
} }
if (thread_handling > SCHEDULER_ONE_THREAD_PER_CONNECTION) unlink_not_visible_thd(thd);
{ delete thd;
mysql_mutex_lock(&LOCK_thread_count);
thd->unlink();
mysql_mutex_unlock(&LOCK_thread_count);
delete thd;
}
my_thread_end(); my_thread_end();
return(NULL); return(NULL);
...@@ -2733,6 +2726,7 @@ void wsrep_unlock_rollback() ...@@ -2733,6 +2726,7 @@ void wsrep_unlock_rollback()
my_bool wsrep_aborting_thd_contains(THD *thd) my_bool wsrep_aborting_thd_contains(THD *thd)
{ {
mysql_mutex_assert_owner(&LOCK_wsrep_rollback);
wsrep_aborting_thd_t abortees = wsrep_aborting_thd; wsrep_aborting_thd_t abortees = wsrep_aborting_thd;
while (abortees) while (abortees)
{ {
......
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