diff --git a/include/service_versions.h b/include/service_versions.h index cca190b811c..ce4a0c931f7 100644 --- a/include/service_versions.h +++ b/include/service_versions.h @@ -31,4 +31,4 @@ #define VERSION_my_sha1 0x0100 #define VERSION_logger 0x0100 #define VERSION_thd_autoinc 0x0100 -#define VERSION_thd_error_context 0x0100 +#define VERSION_thd_error_context 0x0200 diff --git a/sql/sql_class.cc b/sql/sql_class.cc index bebdd82ea83..da1a0e43ac1 100644 --- a/sql/sql_class.cc +++ b/sql/sql_class.cc @@ -725,12 +725,6 @@ extern "C" @param buffer pointer to preferred result buffer @param length length of buffer @param max_query_len how many chars of query to copy (0 for all) - - @req LOCK_thread_count - - @note LOCK_thread_count mutex is not necessary when the function is invoked on - the currently running thread (current_thd) or if the caller in some other - way guarantees that access to thd->query is serialized. @return Pointer to string */ @@ -744,6 +738,9 @@ char *thd_get_error_context_description(THD *thd, char *buffer, const Security_context *sctx= &thd->main_security_ctx; char header[256]; int len; + + mysql_mutex_lock(&LOCK_thread_count); + /* The pointers thd->query and thd->proc_info might change since they are being modified concurrently. This is acceptable for proc_info since its @@ -799,6 +796,7 @@ char *thd_get_error_context_description(THD *thd, char *buffer, } mysql_mutex_unlock(&thd->LOCK_thd_data); } + mysql_mutex_unlock(&LOCK_thread_count); if (str.c_ptr_safe() == buffer) return buffer;