mirror of
https://github.com/MariaDB/server.git
synced 2025-08-07 00:04:31 +03:00
Fix create_background_thd()
Allow the caller to have current_thd. Also do not store PSI_CALL_get_thread() in the new THD, it is a thread local storage variable that can become invalid any time, we do not control the lifetime of the caller's thread.
This commit is contained in:
@@ -4894,11 +4894,13 @@ void destroy_thd(MYSQL_THD thd)
|
||||
extern "C" pthread_key(struct st_my_thread_var *, THR_KEY_mysys);
|
||||
MYSQL_THD create_background_thd()
|
||||
{
|
||||
DBUG_ASSERT(!current_thd);
|
||||
auto save_thd = current_thd;
|
||||
set_current_thd(nullptr);
|
||||
|
||||
auto save_mysysvar= pthread_getspecific(THR_KEY_mysys);
|
||||
|
||||
/*
|
||||
Allocate new mysys_var specifically this THD,
|
||||
Allocate new mysys_var specifically new THD,
|
||||
so that e.g safemalloc, DBUG etc are happy.
|
||||
*/
|
||||
pthread_setspecific(THR_KEY_mysys, 0);
|
||||
@@ -4906,7 +4908,8 @@ MYSQL_THD create_background_thd()
|
||||
auto thd_mysysvar= pthread_getspecific(THR_KEY_mysys);
|
||||
auto thd= new THD(0);
|
||||
pthread_setspecific(THR_KEY_mysys, save_mysysvar);
|
||||
thd->set_psi(PSI_CALL_get_thread());
|
||||
thd->set_psi(nullptr);
|
||||
set_current_thd(save_thd);
|
||||
|
||||
/*
|
||||
Workaround the adverse effect of incrementing thread_count
|
||||
|
Reference in New Issue
Block a user