fix test failures in the runtime tree

parent eda71e24
...@@ -317,11 +317,13 @@ Log_to_csv_event_handler::Log_to_csv_event_handler() ...@@ -317,11 +317,13 @@ Log_to_csv_event_handler::Log_to_csv_event_handler()
/* logger thread always works with mysql database */ /* logger thread always works with mysql database */
general_log_thd->db= my_strdup("mysql", MYF(0)); general_log_thd->db= my_strdup("mysql", MYF(0));
general_log_thd->db_length= 5; general_log_thd->db_length= 5;
general_log.table= 0;
slow_log_thd= new THD; slow_log_thd= new THD;
/* logger thread always works with mysql database */ /* logger thread always works with mysql database */
slow_log_thd->db= my_strdup("mysql", MYF(0));; slow_log_thd->db= my_strdup("mysql", MYF(0));;
slow_log_thd->db_length= 5; slow_log_thd->db_length= 5;
slow_log.table= 0;
/* no privileged thread exists at the moment */ /* no privileged thread exists at the moment */
privileged_thread= 0; privileged_thread= 0;
} }
......
...@@ -4607,11 +4607,11 @@ bool mysql_create_like_table(THD* thd, TABLE_LIST* table, ...@@ -4607,11 +4607,11 @@ bool mysql_create_like_table(THD* thd, TABLE_LIST* table,
char *src_db; char *src_db;
char *src_table= table_ident->table.str; char *src_table= table_ident->table.str;
int err; int err;
bool res= TRUE; bool res= TRUE, unlock_dst_table= FALSE;
enum legacy_db_type not_used; enum legacy_db_type not_used;
HA_CREATE_INFO *create_info; HA_CREATE_INFO *create_info;
TABLE_LIST src_tables_list; TABLE_LIST src_tables_list, dst_tables_list;
DBUG_ENTER("mysql_create_like_table"); DBUG_ENTER("mysql_create_like_table");
if (!(create_info= copy_create_info(lex_create_info))) if (!(create_info= copy_create_info(lex_create_info)))
...@@ -4794,17 +4794,29 @@ bool mysql_create_like_table(THD* thd, TABLE_LIST* table, ...@@ -4794,17 +4794,29 @@ bool mysql_create_like_table(THD* thd, TABLE_LIST* table,
char buf[2048]; char buf[2048];
String query(buf, sizeof(buf), system_charset_info); String query(buf, sizeof(buf), system_charset_info);
query.length(0); // Have to zero it since constructor doesn't query.length(0); // Have to zero it since constructor doesn't
TABLE *table_ptr; uint counter;
int error;
/* /*
Let's open and lock the table: it will be closed (and Here we open the destination table. This is needed for
unlocked) by close_thread_tables() at the end of the store_create_info() to work. The table will be closed
statement anyway. by close_thread_tables() at the end of the statement.
*/ */
if (!(table_ptr= open_ltable(thd, table, TL_READ_NO_INSERT))) if (open_tables(thd, &table, &counter, 0))
goto err; goto err;
bzero((gptr)&dst_tables_list, sizeof(dst_tables_list));
dst_tables_list.db= table->db;
dst_tables_list.table_name= table->table_name;
/*
lock destination table name, to make sure that nobody
can drop/alter the table while we execute store_create_info()
*/
if (lock_and_wait_for_table_name(thd, &dst_tables_list))
goto err;
else
unlock_dst_table= TRUE;
int result= store_create_info(thd, table, &query, create_info); int result= store_create_info(thd, table, &query, create_info);
DBUG_ASSERT(result == 0); // store_create_info() always return 0 DBUG_ASSERT(result == 0); // store_create_info() always return 0
...@@ -4837,6 +4849,12 @@ table_exists: ...@@ -4837,6 +4849,12 @@ table_exists:
my_error(ER_TABLE_EXISTS_ERROR, MYF(0), table_name); my_error(ER_TABLE_EXISTS_ERROR, MYF(0), table_name);
err: err:
if (unlock_dst_table)
{
pthread_mutex_lock(&LOCK_open);
unlock_table_name(thd, &dst_tables_list);
pthread_mutex_unlock(&LOCK_open);
}
DBUG_RETURN(res); DBUG_RETURN(res);
} }
......
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