Commit 2281f754 authored by unknown's avatar unknown

Fixed BUG #16175: Memory leak in rpl_trigger.test

  Allocating/freeing memory for the db member of THD
  is wholy managed by slave thread.

parent 85e54a08
...@@ -1098,7 +1098,8 @@ static long mysql_rm_arc_files(THD *thd, MY_DIR *dirp, ...@@ -1098,7 +1098,8 @@ static long mysql_rm_arc_files(THD *thd, MY_DIR *dirp,
bool mysql_change_db(THD *thd, const char *name, bool no_access_check) bool mysql_change_db(THD *thd, const char *name, bool no_access_check)
{ {
int length, db_length; int length, db_length;
char *dbname=my_strdup((char*) name,MYF(MY_WME)); char *dbname= thd->slave_thread ? (char *) name :
my_strdup((char *) name, MYF(MY_WME));
char path[FN_REFLEN]; char path[FN_REFLEN];
HA_CREATE_INFO create; HA_CREATE_INFO create;
bool system_db= 0; bool system_db= 0;
...@@ -1118,6 +1119,7 @@ bool mysql_change_db(THD *thd, const char *name, bool no_access_check) ...@@ -1118,6 +1119,7 @@ bool mysql_change_db(THD *thd, const char *name, bool no_access_check)
system_db= 1; system_db= 1;
goto end; goto end;
} }
if (!(thd->slave_thread))
x_free(dbname); /* purecov: inspected */ x_free(dbname); /* purecov: inspected */
my_message(ER_NO_DB_ERROR, ER(ER_NO_DB_ERROR), my_message(ER_NO_DB_ERROR, ER(ER_NO_DB_ERROR),
MYF(0)); /* purecov: inspected */ MYF(0)); /* purecov: inspected */
...@@ -1126,6 +1128,7 @@ bool mysql_change_db(THD *thd, const char *name, bool no_access_check) ...@@ -1126,6 +1128,7 @@ bool mysql_change_db(THD *thd, const char *name, bool no_access_check)
if (check_db_name(dbname)) if (check_db_name(dbname))
{ {
my_error(ER_WRONG_DB_NAME, MYF(0), dbname); my_error(ER_WRONG_DB_NAME, MYF(0), dbname);
if (!(thd->slave_thread))
x_free(dbname); x_free(dbname);
DBUG_RETURN(1); DBUG_RETURN(1);
} }
...@@ -1156,6 +1159,7 @@ bool mysql_change_db(THD *thd, const char *name, bool no_access_check) ...@@ -1156,6 +1159,7 @@ bool mysql_change_db(THD *thd, const char *name, bool no_access_check)
dbname); dbname);
mysql_log.write(thd, COM_INIT_DB, ER(ER_DBACCESS_DENIED_ERROR), mysql_log.write(thd, COM_INIT_DB, ER(ER_DBACCESS_DENIED_ERROR),
sctx->priv_user, sctx->priv_host, dbname); sctx->priv_user, sctx->priv_host, dbname);
if (!(thd->slave_thread))
my_free(dbname,MYF(0)); my_free(dbname,MYF(0));
DBUG_RETURN(1); DBUG_RETURN(1);
} }
...@@ -1168,6 +1172,7 @@ bool mysql_change_db(THD *thd, const char *name, bool no_access_check) ...@@ -1168,6 +1172,7 @@ bool mysql_change_db(THD *thd, const char *name, bool no_access_check)
if (my_access(path,F_OK)) if (my_access(path,F_OK))
{ {
my_error(ER_BAD_DB_ERROR, MYF(0), dbname); my_error(ER_BAD_DB_ERROR, MYF(0), dbname);
if (!(thd->slave_thread))
my_free(dbname,MYF(0)); my_free(dbname,MYF(0));
DBUG_RETURN(1); DBUG_RETURN(1);
} }
......
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