Skip to content

Commit f1b6367

Browse files
MDEV-39217 Fix the hash key calculation in session sysvar tracker
MDEV-31751 changed the key from the sys_var pointer to its offset. This was useful for non-plugin variable aliases, but not so much for plugin variables which all have offset 0.
1 parent a9c3cc8 commit f1b6367

File tree

1 file changed

+12
-2
lines changed

1 file changed

+12
-2
lines changed

sql/session_tracker.cc

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,11 @@ void Session_sysvars_tracker::vars_list::copy(vars_list* from, THD *thd)
6363
Session_sysvars_tracker::
6464
sysvar_node_st *Session_sysvars_tracker::vars_list::search(const sys_var *svar)
6565
{
66+
if (((sys_var *)svar)->cast_pluginvar())
67+
return reinterpret_cast<sysvar_node_st*>(
68+
my_hash_search(&m_registered_sysvars,
69+
reinterpret_cast<const uchar*>(&svar),
70+
sizeof(sys_var*)));
6671
return reinterpret_cast<sysvar_node_st*>(
6772
my_hash_search(&m_registered_sysvars,
6873
reinterpret_cast<const uchar*>(&svar->offset),
@@ -571,8 +576,13 @@ void Session_sysvars_tracker::mark_as_changed(THD *thd, const sys_var *var)
571576
const uchar *Session_sysvars_tracker::sysvars_get_key(const void *entry,
572577
size_t *length, my_bool)
573578
{
574-
ptrdiff_t *key=
575-
&((static_cast<const sysvar_node_st *>(entry))->m_svar->offset);
579+
sys_var *svar= (static_cast<const sysvar_node_st *>(entry))->m_svar;
580+
if (svar->cast_pluginvar())
581+
{
582+
*length= sizeof(sys_var *);
583+
return (uchar *) &(((sysvar_node_st *) entry)->m_svar);
584+
}
585+
ptrdiff_t *key= &(svar->offset);
576586
*length= sizeof(*key);
577587
return reinterpret_cast<const uchar *>(key);
578588
}

0 commit comments

Comments
 (0)