Commit c6e1ffd1 authored by Sergei Golubchik's avatar Sergei Golubchik

MDEV-33148 A connection can control RAND() in following connection

initialize THD::rand in THD::init() not in THD::THD(),
because the former is also called when a THD is reused -
in COM_CHANGE_USER and in taking a THD from the cache.

Also use current cycle timer for more unpreditability
parent 9322ef03
...@@ -684,7 +684,6 @@ THD::THD(my_thread_id id, bool is_wsrep_applier) ...@@ -684,7 +684,6 @@ THD::THD(my_thread_id id, bool is_wsrep_applier)
wsrep_wfc() wsrep_wfc()
#endif /*WITH_WSREP */ #endif /*WITH_WSREP */
{ {
ulong tmp;
bzero(&variables, sizeof(variables)); bzero(&variables, sizeof(variables));
/* /*
...@@ -834,14 +833,6 @@ THD::THD(my_thread_id id, bool is_wsrep_applier) ...@@ -834,14 +833,6 @@ THD::THD(my_thread_id id, bool is_wsrep_applier)
tablespace_op=FALSE; tablespace_op=FALSE;
/*
Initialize the random generator. We call my_rnd() without a lock as
it's not really critical if two threads modifies the structure at the
same time. We ensure that we have an unique number foreach thread
by adding the address of the stack.
*/
tmp= (ulong) (my_rnd(&sql_rand) * 0xffffffff);
my_rnd_init(&rand, tmp + (ulong)((size_t) &rand), tmp + (ulong) ::global_query_id);
substitute_null_with_insert_id = FALSE; substitute_null_with_insert_id = FALSE;
lock_info.mysql_thd= (void *)this; lock_info.mysql_thd= (void *)this;
...@@ -1297,6 +1288,17 @@ void THD::init() ...@@ -1297,6 +1288,17 @@ void THD::init()
/* Set to handle counting of aborted connections */ /* Set to handle counting of aborted connections */
userstat_running= opt_userstat_running; userstat_running= opt_userstat_running;
last_global_update_time= current_connect_time= time(NULL); last_global_update_time= current_connect_time= time(NULL);
/*
Initialize the random generator. We call my_rnd() without a lock as
it's not really critical if two threads modify the structure at the
same time. We ensure that we have a unique number for each thread
by adding the address of this THD.
*/
ulong tmp= (ulong) (my_rnd(&sql_rand) * 0xffffffff);
my_rnd_init(&rand, tmp + (ulong)(intptr) this,
(ulong)(my_timer_cycles() + global_query_id));
#if defined(ENABLED_DEBUG_SYNC) #if defined(ENABLED_DEBUG_SYNC)
/* Initialize the Debug Sync Facility. See debug_sync.cc. */ /* Initialize the Debug Sync Facility. See debug_sync.cc. */
debug_sync_init_thread(this); debug_sync_init_thread(this);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment