mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
MDE-21369 rpl.rpl_timezone fails with valgrind: Use of uninitialised value.
It's not safe to chenge the THD::thread_id. So send the thread_id as an argument to the mysql_audit_external_lock.
This commit is contained in:
@ -2076,36 +2076,16 @@ public:
|
||||
passed from connection thread to the handler thread.
|
||||
*/
|
||||
MDL_request grl_protection;
|
||||
my_thread_id orig_thread_id;
|
||||
void set_default_user()
|
||||
{
|
||||
thd.security_ctx->user=(char*) delayed_user;
|
||||
thd.security_ctx->host=(char*) my_localhost;
|
||||
thd.security_ctx->ip= NULL;
|
||||
thd.query_id= 0;
|
||||
thd.thread_id= orig_thread_id;
|
||||
}
|
||||
|
||||
void set_user_from_row(const delayed_row *r)
|
||||
{
|
||||
if (r)
|
||||
{
|
||||
thd.security_ctx->user= r->user;
|
||||
thd.security_ctx->host= r->host;
|
||||
thd.security_ctx->ip= r->ip;
|
||||
thd.query_id= r->query_id;
|
||||
thd.thread_id= r->thread_id;
|
||||
}
|
||||
}
|
||||
|
||||
Delayed_insert(SELECT_LEX *current_select)
|
||||
:locks_in_memory(0), thd(next_thread_id()),
|
||||
table(0),tables_in_use(0), stacked_inserts(0),
|
||||
status(0), retry(0), handler_thread_initialized(FALSE), group_count(0)
|
||||
{
|
||||
DBUG_ENTER("Delayed_insert constructor");
|
||||
orig_thread_id= thd.thread_id;
|
||||
set_default_user();
|
||||
thd.security_ctx->user=(char*) delayed_user;
|
||||
thd.security_ctx->host=(char*) my_localhost;
|
||||
thd.security_ctx->ip= NULL;
|
||||
thd.query_id= 0;
|
||||
strmake_buf(thd.security_ctx->priv_user, thd.security_ctx->user);
|
||||
thd.current_tablenr=0;
|
||||
thd.set_command(COM_DELAYED_INSERT);
|
||||
@ -3081,7 +3061,6 @@ pthread_handler_t handle_delayed_insert(void *arg)
|
||||
|
||||
if (di->tables_in_use && ! thd->lock && !thd->killed)
|
||||
{
|
||||
di->set_user_from_row(di->rows.head());
|
||||
/*
|
||||
Request for new delayed insert.
|
||||
Lock the table, but avoid to be blocked by a global read lock.
|
||||
@ -3103,16 +3082,18 @@ pthread_handler_t handle_delayed_insert(void *arg)
|
||||
{
|
||||
delayed_row *row;
|
||||
I_List_iterator<delayed_row> it(di->rows);
|
||||
my_thread_id cur_thd= di->thd.thread_id;
|
||||
|
||||
while ((row= it++))
|
||||
{
|
||||
if (di->thd.thread_id != row->thread_id)
|
||||
if (cur_thd != row->thread_id)
|
||||
{
|
||||
di->set_user_from_row(row);
|
||||
mysql_audit_external_lock(&di->thd, di->table->s, F_WRLCK);
|
||||
mysql_audit_external_lock_ex(&di->thd, row->thread_id,
|
||||
row->user, row->host, row->ip, row->query_id,
|
||||
di->table->s, F_WRLCK);
|
||||
cur_thd= row->thread_id;
|
||||
}
|
||||
}
|
||||
di->set_default_user();
|
||||
|
||||
if (di->handle_inserts())
|
||||
{
|
||||
/* Some fatal error */
|
||||
|
Reference in New Issue
Block a user