From a3ea8947584dcac29f7cddf35c804e84bba8bb21 Mon Sep 17 00:00:00 2001 From: "aivanov@mysql.com" <> Date: Wed, 1 Mar 2006 16:21:01 +0300 Subject: Fixed BUG #16175: Memory leak in rpl_trigger.test Allocating/freeing memory for the db member of THD is wholy managed by slave thread. --- sql/sql_db.cc | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) (limited to 'sql/sql_db.cc') diff --git a/sql/sql_db.cc b/sql/sql_db.cc index 357d2d5a21f..63a7b1df8f1 100644 --- a/sql/sql_db.cc +++ b/sql/sql_db.cc @@ -1098,7 +1098,8 @@ err: bool mysql_change_db(THD *thd, const char *name, bool no_access_check) { 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]; HA_CREATE_INFO create; bool system_db= 0; @@ -1118,7 +1119,8 @@ bool mysql_change_db(THD *thd, const char *name, bool no_access_check) system_db= 1; goto end; } - x_free(dbname); /* purecov: inspected */ + if (!(thd->slave_thread)) + x_free(dbname); /* purecov: inspected */ my_message(ER_NO_DB_ERROR, ER(ER_NO_DB_ERROR), MYF(0)); /* purecov: inspected */ DBUG_RETURN(1); /* purecov: inspected */ @@ -1126,7 +1128,8 @@ bool mysql_change_db(THD *thd, const char *name, bool no_access_check) if (check_db_name(dbname)) { my_error(ER_WRONG_DB_NAME, MYF(0), dbname); - x_free(dbname); + if (!(thd->slave_thread)) + x_free(dbname); DBUG_RETURN(1); } DBUG_PRINT("info",("Use database: %s", dbname)); @@ -1156,7 +1159,8 @@ bool mysql_change_db(THD *thd, const char *name, bool no_access_check) dbname); mysql_log.write(thd, COM_INIT_DB, ER(ER_DBACCESS_DENIED_ERROR), sctx->priv_user, sctx->priv_host, dbname); - my_free(dbname,MYF(0)); + if (!(thd->slave_thread)) + my_free(dbname,MYF(0)); DBUG_RETURN(1); } } @@ -1168,7 +1172,8 @@ bool mysql_change_db(THD *thd, const char *name, bool no_access_check) if (my_access(path,F_OK)) { my_error(ER_BAD_DB_ERROR, MYF(0), dbname); - my_free(dbname,MYF(0)); + if (!(thd->slave_thread)) + my_free(dbname,MYF(0)); DBUG_RETURN(1); } end: -- cgit v1.2.1