From 50160216eab066de7a71dd8e355f0c5cb29c8789 Mon Sep 17 00:00:00 2001 From: Vladislav Vaintroub Date: Fri, 4 Dec 2015 18:16:04 +0100 Subject: MDEV-9156 : Fix tp_add_connection()'s error handling Avoid possible my_thread_end() in the main polling thread. --- sql/threadpool_common.cc | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) (limited to 'sql/threadpool_common.cc') diff --git a/sql/threadpool_common.cc b/sql/threadpool_common.cc index 9e0cb07b86c..5bcea767aae 100644 --- a/sql/threadpool_common.cc +++ b/sql/threadpool_common.cc @@ -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. -- cgit v1.2.1