diff options
author | unknown <vva@eagle.mysql.r18.ru> | 2004-04-03 02:44:38 +0500 |
---|---|---|
committer | unknown <vva@eagle.mysql.r18.ru> | 2004-04-03 02:44:38 +0500 |
commit | cee153b87a19f2c60916ca62e48c11a42dd8bf9c (patch) | |
tree | 04e49a857e720460475ff9d3941032ffff965c24 | |
parent | f2116615bed09a5b2bb6f113ba3ea1beebcb5e54 (diff) | |
download | mariadb-git-cee153b87a19f2c60916ca62e48c11a42dd8bf9c.tar.gz |
made some optimization of last patch for
Bug #2385 "CREATE TABLE LIKE lacks locking on source and destination table"
(in sql_table.cc and mysql-test/t/synchronization.test)
mysql-test/t/synchronization.test:
added sleep to more reliable work
sql/sql_table.cc:
made some optimization of last patch for
Bug #2385 "CREATE TABLE LIKE lacks locking on source and destination table"
in mysql_create_like_table
-rw-r--r-- | mysql-test/t/synchronization.test | 1 | ||||
-rw-r--r-- | sql/sql_table.cc | 22 |
2 files changed, 11 insertions, 12 deletions
diff --git a/mysql-test/t/synchronization.test b/mysql-test/t/synchronization.test index 84478cf7445..695e405544a 100644 --- a/mysql-test/t/synchronization.test +++ b/mysql-test/t/synchronization.test @@ -13,6 +13,7 @@ CREATE TABLE t1 (a int); send CREATE TABLE t2 LIKE t1; connection con_to_harm_sleeper; +sleep 1; ALTER TABLE t1 add key(a); connection con_to_sleep; diff --git a/sql/sql_table.cc b/sql/sql_table.cc index 8a1ecc115df..e06b0efaadf 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -1986,27 +1986,25 @@ int mysql_create_like_table(THD* thd, TABLE_LIST* table, mysql_bin_log.write(&qinfo); } res= 0; - -err: - pthread_mutex_lock(&LOCK_open); - unlock_table_name(thd, &src_tables_list); - pthread_mutex_unlock(&LOCK_open); - DBUG_RETURN(res); + goto err; table_exists: - pthread_mutex_lock(&LOCK_open); - unlock_table_name(thd, &src_tables_list); - pthread_mutex_unlock(&LOCK_open); if (create_info->options & HA_LEX_CREATE_IF_NOT_EXISTS) { char warn_buff[MYSQL_ERRMSG_SIZE]; sprintf(warn_buff,ER(ER_TABLE_EXISTS_ERROR),table_name); push_warning(thd, MYSQL_ERROR::WARN_LEVEL_WARN, ER_TABLE_EXISTS_ERROR,warn_buff); - DBUG_RETURN(0); + res= 0; } - my_error(ER_TABLE_EXISTS_ERROR, MYF(0), table_name); - DBUG_RETURN(-1); + else + my_error(ER_TABLE_EXISTS_ERROR, MYF(0), table_name); + +err: + pthread_mutex_lock(&LOCK_open); + unlock_table_name(thd, &src_tables_list); + pthread_mutex_unlock(&LOCK_open); + DBUG_RETURN(res); } |