summaryrefslogtreecommitdiff
path: root/sql/sql_class.cc
diff options
context:
space:
mode:
authorSergei Golubchik <serg@mariadb.org>2017-07-19 19:47:38 +0200
committerSergei Golubchik <serg@mariadb.org>2017-07-20 20:13:28 +0200
commitdc8b2fb03a5a2dff4687eb8dad042b34730b5210 (patch)
treeeee3c4a9f81b5f6d648c33e8b7023a492c167938 /sql/sql_class.cc
parentda2a838628796453c6ab93d51eca9e5aae45791d (diff)
downloadmariadb-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.cc10
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;