diff options
author | Sergei Golubchik <serg@mariadb.org> | 2017-07-19 19:47:38 +0200 |
---|---|---|
committer | Sergei Golubchik <serg@mariadb.org> | 2017-07-20 20:13:28 +0200 |
commit | dc8b2fb03a5a2dff4687eb8dad042b34730b5210 (patch) | |
tree | eee3c4a9f81b5f6d648c33e8b7023a492c167938 /sql/sql_class.cc | |
parent | da2a838628796453c6ab93d51eca9e5aae45791d (diff) | |
download | mariadb-git-dc8b2fb03a5a2dff4687eb8dad042b34730b5210.tar.gz |
MDEV-11896 thd_get_error_context_description race condition
Change the semantics of thd_get_error_context_description().
It no longer expects the caller to lock LOCK_thread_count
(no caller ever did that anyway), but takes care of it internally.
Diffstat (limited to 'sql/sql_class.cc')
-rw-r--r-- | sql/sql_class.cc | 10 |
1 files changed, 4 insertions, 6 deletions
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; |