diff options
author | unknown <monty@narttu.mysql.fi> | 2003-03-18 11:17:48 +0200 |
---|---|---|
committer | unknown <monty@narttu.mysql.fi> | 2003-03-18 11:17:48 +0200 |
commit | 2ae89fca8da0b087dee19ea2c83bdda815c01ed2 (patch) | |
tree | a7bad6bcbb23f23c615a80983400f8c52ae5b2f3 | |
parent | ec8e9125e0df422798bdb31ef60d9970de6b0731 (diff) | |
download | mariadb-git-2ae89fca8da0b087dee19ea2c83bdda815c01ed2.tar.gz |
Fixes to avoid errors from valgrind
Fixed problem with 'wrong packet number' in union
include/my_global.h:
Fix for valgrind
mysql-test/t/rpl_rotate_logs.test:
Fix to avoid timeing problem
sql/item.h:
Indentation change
sql/set_var.cc:
Fix to avoid reference to uninitialized memory
sql/sql_select.cc:
More DBUG_PRINT messages
Fixed problem with 'wrong packet number' in union (tmp_join.error was not correctly reset)
sql/sql_union.cc:
Simple code cleanup
strings/ctype-simple.c:
Fix for valgrind
-rw-r--r-- | include/my_global.h | 6 | ||||
-rw-r--r-- | mysql-test/t/rpl_rotate_logs.test | 1 | ||||
-rw-r--r-- | sql/item.h | 2 | ||||
-rw-r--r-- | sql/set_var.cc | 2 | ||||
-rw-r--r-- | sql/sql_select.cc | 46 | ||||
-rw-r--r-- | sql/sql_union.cc | 10 | ||||
-rw-r--r-- | strings/ctype-simple.c | 10 |
7 files changed, 55 insertions, 22 deletions
diff --git a/include/my_global.h b/include/my_global.h index 64bfefa16f3..30785d6a9b6 100644 --- a/include/my_global.h +++ b/include/my_global.h @@ -870,7 +870,13 @@ typedef char bool; /* Ordinary boolean values 0 1 */ ((uint32) (uchar) (A)[0]))) #define sint4korr(A) (*((long *) (A))) #define uint2korr(A) (*((uint16 *) (A))) +#ifdef HAVE_purify +#define uint3korr(A) (uint32) (((uint32) ((uchar) (A)[0])) +\ + (((uint32) ((uchar) (A)[1])) << 8) +\ + (((uint32) ((uchar) (A)[2])) << 16)) +#else #define uint3korr(A) (long) (*((unsigned long *) (A)) & 0xFFFFFF) +#endif #define uint4korr(A) (*((unsigned long *) (A))) #define uint5korr(A) ((ulonglong)(((uint32) ((uchar) (A)[0])) +\ (((uint32) ((uchar) (A)[1])) << 8) +\ diff --git a/mysql-test/t/rpl_rotate_logs.test b/mysql-test/t/rpl_rotate_logs.test index 0852eb584d5..8ad5109d2c6 100644 --- a/mysql-test/t/rpl_rotate_logs.test +++ b/mysql-test/t/rpl_rotate_logs.test @@ -91,6 +91,7 @@ sync_slave_with_master; connection master; purge master logs to 'master-bin.000002'; show binary logs; +--sleep 1; purge logs before now(); show binary logs; insert into t2 values (65); diff --git a/sql/item.h b/sql/item.h index 8e1f4a38237..d7ca9bf855a 100644 --- a/sql/item.h +++ b/sql/item.h @@ -527,7 +527,7 @@ public: enum Item_result result_type () const { return (*ref)->result_type(); } enum_field_types field_type() const { return (*ref)->field_type(); } table_map used_tables() const { return (*ref)->used_tables(); } - void set_result_field(Field *field) { result_field= field; } + void set_result_field(Field *field) { result_field= field; } bool is_result_field() { return 1; } void save_in_result_field(bool no_conversions) { diff --git a/sql/set_var.cc b/sql/set_var.cc index b6e10cbc5b1..4189543e70e 100644 --- a/sql/set_var.cc +++ b/sql/set_var.cc @@ -1100,7 +1100,7 @@ byte *sys_var_thd_sql_mode::value_ptr(THD *thd, enum_var_type type) } if (tmp.length()) tmp.length(tmp.length() - 1); - return (byte*) thd->strdup(tmp.c_ptr()); + return (byte*) thd->strmake(tmp.ptr(), tmp.length()); } diff --git a/sql/sql_select.cc b/sql/sql_select.cc index 6f3dfeb3558..0126b900b9a 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -449,6 +449,7 @@ JOIN::optimize() // quick abort delete procedure; error= thd->is_fatal_error ? -1 : 1; + DBUG_PRINT("error",("Error from optimize_cond")); DBUG_RETURN(error); } @@ -456,6 +457,7 @@ JOIN::optimize() (!unit->select_limit_cnt && !(select_options & OPTION_FOUND_ROWS))) { /* Impossible cond */ zero_result_cause= "Impossible WHERE"; + error= 0; DBUG_RETURN(0); } @@ -468,16 +470,18 @@ JOIN::optimize() if (res < 0) { zero_result_cause= "No matching min/max row"; + error=0; DBUG_RETURN(0); } zero_result_cause= "Select tables optimized away"; tables_list= 0; // All tables resolved } } - if (!tables_list) + { + error= 0; DBUG_RETURN(0); - + } error= -1; // Error is sent to client sort_by_table= get_sort_by_table(order, group_list, tables_list); @@ -485,18 +489,24 @@ JOIN::optimize() thd->proc_info= "statistics"; if (make_join_statistics(this, tables_list, conds, &keyuse) || thd->is_fatal_error) + { + DBUG_PRINT("error",("Error: make_join_statistics() failed")); DBUG_RETURN(1); + } thd->proc_info= "preparing"; if (result->initialize_tables(this)) { - DBUG_RETURN(1); // error = -1 + DBUG_PRINT("error",("Error: initialize_tables() failed")); + DBUG_RETURN(1); // error == -1 } if (const_table_map != found_const_table_map && !(select_options & SELECT_DESCRIBE)) { zero_result_cause= "no matching row in const table"; + DBUG_PRINT("error",("Error: %s", zero_result_cause)); select_options= 0; //TODO why option in return_zero_rows was droped + error= 0; DBUG_RETURN(0); } if (!(thd->options & OPTION_BIG_SELECTS) && @@ -535,13 +545,14 @@ JOIN::optimize() if (error) { /* purecov: inspected */ error= -1; /* purecov: inspected */ + DBUG_PRINT("error",("Error: make_select() failed")); DBUG_RETURN(1); } if (make_join_select(this, select, conds)) { zero_result_cause= "Impossible WHERE noticed after reading const tables"; - DBUG_RETURN(0); + DBUG_RETURN(0); // error == 0 } error= -1; /* if goto err */ @@ -705,8 +716,10 @@ JOIN::optimize() } if (select_options & SELECT_DESCRIBE) + { + error= 0; DBUG_RETURN(0); - + } tmp_having= having; having= 0; @@ -806,10 +819,12 @@ JOIN::optimize() { if (!(tmp_join= (JOIN*)thd->alloc(sizeof(JOIN)))) DBUG_RETURN(-1); + error= 0; // Ensure that tmp_join.error= 0 restore_tmp(); } } + error= 0; DBUG_RETURN(0); } @@ -875,9 +890,9 @@ void JOIN::exec() { int tmp_error; - DBUG_ENTER("JOIN::exec"); + error= 0; if (procedure) { if (procedure->change_columns(fields_list) || @@ -887,7 +902,6 @@ JOIN::exec() if (!tables_list) { // Only test of functions - error=0; if (select_options & SELECT_DESCRIBE) select_describe(this, false, false, false, (zero_result_cause?zero_result_cause:"No tables used")); @@ -914,8 +928,6 @@ JOIN::exec() if (zero_result_cause) { - error=0; - (void) return_zero_rows(this, result, tables_list, fields_list, tmp_table_param.sum_func_count != 0 && !group_list, @@ -940,7 +952,6 @@ JOIN::exec() select_describe(this, need_tmp, order != 0 && !skip_sort_order, select_distinct); - error=0; DBUG_VOID_RETURN; } @@ -1252,6 +1263,7 @@ JOIN::exec() DBUG_VOID_RETURN; } + /* Clean up join. Return error that hold JOIN. */ @@ -1278,7 +1290,6 @@ JOIN::cleanup(THD *thd) DBUG_RETURN(tmp_join->cleanup(thd)); } - lock=0; // It's faster to unlock later join_free(this, 1); if (exec_tmp_table1) @@ -1297,6 +1308,7 @@ JOIN::cleanup(THD *thd) DBUG_RETURN(error); } + int mysql_select(THD *thd, Item ***rref_pointer_array, TABLE_LIST *tables, uint wild_num, List<Item> &fields, @@ -4929,17 +4941,25 @@ do_select(JOIN *join,List<Item> *fields,TABLE *table,Procedure *procedure) int tmp; if ((tmp=table->file->extra(HA_EXTRA_NO_CACHE))) { - my_errno=tmp; + DBUG_PRINT("error",("extra(HA_EXTRA_NO_CACHE) failed")); + my_errno= tmp; error= -1; } if ((tmp=table->file->index_end())) { - my_errno=tmp; + DBUG_PRINT("error",("index_end() failed")); + my_errno= tmp; error= -1; } if (error == -1) table->file->print_error(my_errno,MYF(0)); } +#ifndef DBUG_OFF + if (error) + { + DBUG_PRINT("error",("Error: do_select() failed")); + } +#endif DBUG_RETURN(error || join->thd->net.report_error); } diff --git a/sql/sql_union.cc b/sql/sql_union.cc index 607f3007d1d..5f7a1e44bde 100644 --- a/sql/sql_union.cc +++ b/sql/sql_union.cc @@ -241,11 +241,13 @@ err: DBUG_RETURN(-1); } + int st_select_lex_unit::exec() { DBUG_ENTER("st_select_lex_unit::exec"); SELECT_LEX_NODE *lex_select_save= thd->lex.current_select; SELECT_LEX *select_cursor=first_select_in_union(), *last_select; + LINT_INIT(last_select); if (executed && !(dependent || uncacheable)) DBUG_RETURN(0); @@ -321,14 +323,9 @@ int st_select_lex_unit::exec() thd->lex.current_select = select_cursor; res =-1; { -#if 0 - List<Item_func_match> ftfunc_list; - ftfunc_list.empty(); -#else List<Item_func_match> empty_list; empty_list.empty(); thd->lex.select_lex.ftfunc_list= &empty_list; -#endif if (!thd->is_fatal_error) // Check if EOM { @@ -360,9 +357,8 @@ int st_select_lex_unit::exec() int st_select_lex_unit::cleanup() { - DBUG_ENTER("st_select_lex_unit::cleanup"); - int error= 0; + DBUG_ENTER("st_select_lex_unit::cleanup"); if (union_result) { diff --git a/strings/ctype-simple.c b/strings/ctype-simple.c index 5fb62d3056f..3bca6c6b54f 100644 --- a/strings/ctype-simple.c +++ b/strings/ctype-simple.c @@ -732,7 +732,17 @@ double my_strntod_8bit(CHARSET_INFO *cs __attribute__((unused)), double result; errno= 0; /* Safety */ + + /* + The following define is to avoid warnings from valgrind as str[length] + may not be defined (which is not fatal in real life) + */ + +#ifdef HAVE_purify + if (length == INT_MAX32) +#else if (length == INT_MAX32 || str[length] == 0) +#endif result= strtod(str, end); else { |