From 2f2d0b60d4ce3402dc27b76eadbf5e7d3aa89c12 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 27 Oct 2005 15:15:01 +0300 Subject: [PATCH] Fixes during review of pushed code Added back missing return in mysql_delete() mysql-test/my_manage.c: Cleanup: Remove some #ifdef mysql-test/r/drop_temp_table.result: Delete database that may be left from other test mysql-test/t/drop_temp_table.test: Delete database that may be left from other test sql/log.cc: false -> FALSE true -> TRUE Wait until readers_count is 0 (not just for a signal) NOTE: it's very likely that the way to handle readers_count is wrong. (We are in pthread_cond_wait freeing a mutex that is not the innermost mutex, which can lead to deadlocks) I will talk with Guilhem about this ASAP sql/log_event.h: Remove number from last even to help future merges (all compilers I know of can handle this properly) sql/sql_delete.cc: Add back missing RETURN (was lost in a merge) Indentation fixes --- mysql-test/my_manage.c | 25 +++++++++++-------------- mysql-test/r/drop_temp_table.result | 1 + mysql-test/t/drop_temp_table.test | 4 ++++ sql/log.cc | 8 ++++---- sql/log_event.h | 5 ++--- sql/sql_delete.cc | 8 +++++--- 6 files changed, 27 insertions(+), 24 deletions(-) diff --git a/mysql-test/my_manage.c b/mysql-test/my_manage.c index 919d3bd0529..e5d1be42f95 100644 --- a/mysql-test/my_manage.c +++ b/mysql-test/my_manage.c @@ -231,9 +231,6 @@ int wait_for_server_start(char *bin_dir __attribute__((unused)), { arg_list_t al; int err= 0; -#ifndef __WIN__ - int i; -#endif char trash[FN_REFLEN]; /* mysqladmin file */ @@ -247,16 +244,11 @@ int wait_for_server_start(char *bin_dir __attribute__((unused)), add_arg(&al, "--user=%s", user); add_arg(&al, "--password=%s", password); add_arg(&al, "--silent"); - -/* #ifdef NOT_USED */ -#ifndef __NETWARE__ - add_arg(&al, "-O"); - add_arg(&al, "connect_timeout=10"); - add_arg(&al, "-w"); -#endif - add_arg(&al, "--host=localhost"); + #ifndef __NETWARE__ + add_arg(&al, "--connect_timeout=10"); + add_arg(&al, "-w"); add_arg(&al, "--protocol=tcp"); #endif add_arg(&al, "ping"); @@ -266,9 +258,14 @@ int wait_for_server_start(char *bin_dir __attribute__((unused)), -- we will try the ping multiple times */ #ifndef __WIN__ - for (i= 0; (i < TRY_MAX) - && (err= spawn(mysqladmin_file, &al, TRUE, NULL, - trash, NULL, NULL)); i++) sleep(1); + { + int i; + for (i= 0; + (i < TRY_MAX) && (err= spawn(mysqladmin_file, &al, TRUE, NULL, + trash, NULL, NULL)); + i++) + sleep(1); + } #else err= spawn(mysqladmin_file, &al, TRUE, NULL,trash, NULL, NULL); #endif diff --git a/mysql-test/r/drop_temp_table.result b/mysql-test/r/drop_temp_table.result index 26b8511661a..96481341bd6 100644 --- a/mysql-test/r/drop_temp_table.result +++ b/mysql-test/r/drop_temp_table.result @@ -1,3 +1,4 @@ +drop database if exists `drop-temp+table-test`; reset master; create database `drop-temp+table-test`; use `drop-temp+table-test`; diff --git a/mysql-test/t/drop_temp_table.test b/mysql-test/t/drop_temp_table.test index 38c13e3e5e4..bc06de4096c 100644 --- a/mysql-test/t/drop_temp_table.test +++ b/mysql-test/t/drop_temp_table.test @@ -1,6 +1,10 @@ # Embedded server doesn't support binlog -- source include/not_embedded.inc +--disable_warnings +drop database if exists `drop-temp+table-test`; +--enable_warnings + connect (con1,localhost,root,,); connect (con2,localhost,root,,); connection con1; diff --git a/sql/log.cc b/sql/log.cc index a881602d510..f9f71e2d55a 100644 --- a/sql/log.cc +++ b/sql/log.cc @@ -358,7 +358,7 @@ MYSQL_LOG::MYSQL_LOG() :bytes_written(0), last_time(0), query_start(0), name(0), file_id(1), open_count(1), log_type(LOG_CLOSED), write_error(0), inited(0), need_start_event(1), prepared_xids(0), description_event_for_exec(0), - description_event_for_queue(0), readers_count(0), reset_pending(false) + description_event_for_queue(0), readers_count(0), reset_pending(FALSE) { /* We don't want to initialize LOCK_Log here as such initialization depends on @@ -965,7 +965,7 @@ bool MYSQL_LOG::reset_logs(THD* thd) goto err; } - reset_pending= true; + reset_pending= TRUE; /* send update signal just in case so that all reader threads waiting for log update will leave wait condition @@ -975,7 +975,7 @@ bool MYSQL_LOG::reset_logs(THD* thd) if there are active readers wait until all of them will release opened files */ - if (readers_count) + while (readers_count) pthread_cond_wait(&reset_cond, &LOCK_log); for (;;) @@ -996,7 +996,7 @@ bool MYSQL_LOG::reset_logs(THD* thd) my_free((gptr) save_name, MYF(0)); err: - reset_pending= false; + reset_pending= FALSE; (void) pthread_mutex_unlock(&LOCK_thread_count); pthread_mutex_unlock(&LOCK_readers); diff --git a/sql/log_event.h b/sql/log_event.h index 8acdf015464..7783a97f03f 100644 --- a/sql/log_event.h +++ b/sql/log_event.h @@ -430,11 +430,10 @@ enum Log_event_type /* Add new events here - right above this comment! - And change the ENUM_END_EVENT_MARKER below. - Existing events should never change their numbers + Existing events (except ENUM_END_EVENT) should never change their numbers */ - ENUM_END_EVENT= 19 /* end marker */ + ENUM_END_EVENT /* end marker */ }; /* diff --git a/sql/sql_delete.cc b/sql/sql_delete.cc index 83f50ba3ac5..c8e0b6c66f9 100644 --- a/sql/sql_delete.cc +++ b/sql/sql_delete.cc @@ -158,14 +158,16 @@ bool mysql_delete(THD *thd, TABLE_LIST *table_list, COND *conds, table->sort.io_cache= (IO_CACHE *) my_malloc(sizeof(IO_CACHE), MYF(MY_FAE | MY_ZEROFILL)); - if ( !(sortorder=make_unireg_sortorder((ORDER*) order->first, &length)) || + if (!(sortorder= make_unireg_sortorder((ORDER*) order->first, + &length)) || (table->sort.found_records = filesort(thd, table, sortorder, length, - select, HA_POS_ERROR, - &examined_rows)) + select, HA_POS_ERROR, + &examined_rows)) == HA_POS_ERROR) { delete select; free_underlaid_joins(thd, &thd->lex->select_lex); + DBUG_RETURN(TRUE); } /* Filesort has already found and selected the rows we want to delete,