MDEV-9156 : Fix tp_add_connection()'s error handling

Avoid possible my_thread_end() in the main polling thread.
This commit is contained in:
Vladislav Vaintroub 2015-12-04 18:16:04 +01:00
commit 50160216ea
4 changed files with 19 additions and 12 deletions

View file

@ -168,22 +168,28 @@ int threadpool_add_connection(THD *thd)
return retval;
}
/*
threadpool_cleanup_connection() does the bulk of connection shutdown work.
Usually called from threadpool_remove_connection(), but rarely it might
be called also in the main polling thread if connection initialization fails.
*/
void threadpool_cleanup_connection(THD *thd)
{
thd->net.reading_or_writing = 0;
end_connection(thd);
close_connection(thd, 0);
unlink_thd(thd);
mysql_cond_broadcast(&COND_thread_count);
}
void threadpool_remove_connection(THD *thd)
{
Worker_thread_context worker_context;
worker_context.save();
thread_attach(thd);
thd->net.reading_or_writing= 0;
end_connection(thd);
close_connection(thd, 0);
unlink_thd(thd);
mysql_cond_broadcast(&COND_thread_count);
threadpool_cleanup_connection(thd);
/*
Free resources associated with this connection:
mysys thread_var and PSI thread.