summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/mysqld.h12
-rw-r--r--sql/sql_class.h4
-rw-r--r--sql/sql_parse.cc8
3 files changed, 7 insertions, 17 deletions
diff --git a/sql/mysqld.h b/sql/mysqld.h
index e581b413e0d..f500a0abf3f 100644
--- a/sql/mysqld.h
+++ b/sql/mysqld.h
@@ -438,7 +438,7 @@ extern my_atomic_rwlock_t global_query_id_lock;
void unireg_end(void) __attribute__((noreturn));
/* increment query_id and return it. */
-inline query_id_t next_query_id()
+inline __attribute__((warn_unused_result)) query_id_t next_query_id()
{
query_id_t id;
my_atomic_rwlock_wrlock(&global_query_id_lock);
@@ -447,16 +447,6 @@ inline query_id_t next_query_id()
return (id+1);
}
-inline query_id_t get_query_id()
-{
- query_id_t id;
- my_atomic_rwlock_wrlock(&global_query_id_lock);
- id= my_atomic_load64(&global_query_id);
- my_atomic_rwlock_wrunlock(&global_query_id_lock);
- return id;
-}
-
-
/*
TODO: Replace this with an inline function.
*/
diff --git a/sql/sql_class.h b/sql/sql_class.h
index 7211eca4939..58328713e77 100644
--- a/sql/sql_class.h
+++ b/sql/sql_class.h
@@ -3667,7 +3667,9 @@ public:
/**
Skip the increase of the global query id counter. Commonly set for
commands that are stateless (won't cause any change on the server
- internal states).
+ internal states). This is made obsolete as query id is incremented for
+ ping and statistics commands as well because of race condition
+ (Bug#58785).
*/
#define CF_SKIP_QUERY_ID (1U << 0)
diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc
index 6e2b422bd44..fe9f564672a 100644
--- a/sql/sql_parse.cc
+++ b/sql/sql_parse.cc
@@ -237,8 +237,8 @@ void init_update_queries(void)
/* Initialize the server command flags array. */
memset(server_command_flags, 0, sizeof(server_command_flags));
- server_command_flags[COM_STATISTICS]= CF_SKIP_QUERY_ID | CF_SKIP_QUESTIONS;
- server_command_flags[COM_PING]= CF_SKIP_QUERY_ID | CF_SKIP_QUESTIONS;
+ server_command_flags[COM_STATISTICS]= CF_SKIP_QUESTIONS;
+ server_command_flags[COM_PING]= CF_SKIP_QUESTIONS;
server_command_flags[COM_STMT_PREPARE]= CF_SKIP_QUESTIONS;
server_command_flags[COM_STMT_CLOSE]= CF_SKIP_QUESTIONS;
server_command_flags[COM_STMT_RESET]= CF_SKIP_QUESTIONS;
@@ -901,9 +901,7 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
thd->security_ctx->master_access|= SHUTDOWN_ACL;
command= COM_SHUTDOWN;
}
- thd->set_query_id(get_query_id());
- if (!(server_command_flags[command] & CF_SKIP_QUERY_ID))
- next_query_id();
+ thd->set_query_id(next_query_id());
inc_thread_running();
if (!(server_command_flags[command] & CF_SKIP_QUESTIONS))