From 51ffca50b6f281cc6d4166b3cc3dfbc47a53ef3c Mon Sep 17 00:00:00 2001 From: Davi Arnaut Date: Tue, 9 Nov 2010 13:59:33 -0200 Subject: [PATCH] Bug#58080: Crash on failure to create a thread to handle a user connection The problem was that the scheduler function used to handle a new user connection could use the ER() macro without having a THD object bound to the current thread. The crash would happen whenever the function failed to create a new thread to handle a user connection. Thread creation can fail due to lack or limit of available resources. The solution is to simply use the ER_THD() macro instead and pass to it the THD object which would be bound to the connection. Fix was tested manually. In a test case, it is too cumbersome to inject a error in this context. sql/mysqld.cc: Use ER_THD and pass the object. --- sql/mysqld.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql/mysqld.cc b/sql/mysqld.cc index 21754b23940..9f5f3d46e67 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -4949,7 +4949,7 @@ void create_thread_to_handle_connection(THD *thd) statistic_increment(aborted_connects,&LOCK_status); /* Can't use my_error() since store_globals has not been called. */ my_snprintf(error_message_buff, sizeof(error_message_buff), - ER(ER_CANT_CREATE_THREAD), error); + ER_THD(thd, ER_CANT_CREATE_THREAD), error); net_send_error(thd, ER_CANT_CREATE_THREAD, error_message_buff, NULL); mysql_mutex_lock(&LOCK_thread_count); close_connection(thd,0,0);