diff options
-rw-r--r-- | BUILD/FINISH.sh | 2 | ||||
-rw-r--r-- | BUILD/SETUP.sh | 4 | ||||
-rwxr-xr-x | BUILD/compile-pentium-valgrind-max | 32 | ||||
-rw-r--r-- | mysql-test/r/innodb.result | 1 | ||||
-rw-r--r-- | mysql-test/r/rpl_max_relay_size.result | 4 | ||||
-rw-r--r-- | mysql-test/t/innodb.test | 4 | ||||
-rw-r--r-- | mysql-test/t/rpl_max_relay_size.test | 2 | ||||
-rw-r--r-- | sql/handler.cc | 3 | ||||
-rw-r--r-- | sql/opt_range.cc | 10 | ||||
-rw-r--r-- | sql/sql_db.cc | 14 | ||||
-rw-r--r-- | sql/sql_parse.cc | 5 | ||||
-rw-r--r-- | sql/sql_repl.cc | 4 | ||||
-rw-r--r-- | sql/sql_select.cc | 2 |
13 files changed, 40 insertions, 47 deletions
diff --git a/BUILD/FINISH.sh b/BUILD/FINISH.sh index 72188b9c24b..094eb8275d6 100644 --- a/BUILD/FINISH.sh +++ b/BUILD/FINISH.sh @@ -49,7 +49,7 @@ strip sql/mysqld" fi fi -if test -z "$nonono" +if test -z "$just_print" then eval "set -x; $commands" else diff --git a/BUILD/SETUP.sh b/BUILD/SETUP.sh index 4d41f514704..aa6b412d73b 100644 --- a/BUILD/SETUP.sh +++ b/BUILD/SETUP.sh @@ -4,13 +4,13 @@ then exit 1 fi -nonono= +just_print= just_configure= while test $# -gt 0 do case "$1" in -c | --just-configure ) just_configure=1; shift ;; - -n | --just-print | --print ) nonono=1; shift ;; + -n | --just-print | --print ) just_print=1; shift ;; -h | --help ) cat <<EOF; exit 0 ;; Usage: $0 [-h|-n] [configure-options] -h, --help Show this help message. diff --git a/BUILD/compile-pentium-valgrind-max b/BUILD/compile-pentium-valgrind-max index f752af86d1c..f47061b95dd 100755 --- a/BUILD/compile-pentium-valgrind-max +++ b/BUILD/compile-pentium-valgrind-max @@ -1,17 +1,5 @@ #! /bin/sh -echo "\ -******************************************************************************** -Note that by default BUILD/compile-pentium-valgrind-max calls 'configure' with ---enable-assembler. When Valgrind detects an error involving an assembly -function (for example an uninitialized value used as an argument of an assembly -function), Valgrind will not print the stacktrace and 'valgrind ---gdb-attach=yes' will not work either. If you need a stacktrace in those cases, -you have to run BUILD/compile-pentium-valgrind-max with the --disable-assembler -argument. -******************************************************************************** -" - path=`dirname $0` . "$path/SETUP.sh" @@ -24,14 +12,16 @@ extra_configs="$extra_configs --with-berkeley-db --with-innodb --without-isam -- . "$path/FINISH.sh" -echo "\ -******************************************************************************** +if test -z "$just_print" +then + echo "\ +****************************************************************************** Note that by default BUILD/compile-pentium-valgrind-max calls 'configure' with --enable-assembler. When Valgrind detects an error involving an assembly -function (for example an uninitialized value used as an argument of an assembly -function), Valgrind will not print the stacktrace and 'valgrind ---gdb-attach=yes' will not work either. If you need a stacktrace in those cases, -you have to run BUILD/compile-pentium-valgrind-max with the --disable-assembler -argument. -******************************************************************************** -" +function (for example an uninitialized value used as an argument of an +assembly function), Valgrind will not print the stacktrace and 'valgrind +--gdb-attach=yes' will not work either. If you need a stacktrace in those +cases, you have to run BUILD/compile-pentium-valgrind-max with the +--disable-assembler argument. +******************************************************************************" +fi diff --git a/mysql-test/r/innodb.result b/mysql-test/r/innodb.result index 718e554b904..af39dbf51f1 100644 --- a/mysql-test/r/innodb.result +++ b/mysql-test/r/innodb.result @@ -256,7 +256,6 @@ start transaction; insert into t1 values (4); flush tables with read lock; commit; -ERROR HY000: Can't execute the query because you have a conflicting read lock unlock tables; commit; select * from t1; diff --git a/mysql-test/r/rpl_max_relay_size.result b/mysql-test/r/rpl_max_relay_size.result index a8b5527f687..de66336b6d9 100644 --- a/mysql-test/r/rpl_max_relay_size.result +++ b/mysql-test/r/rpl_max_relay_size.result @@ -49,12 +49,12 @@ flush logs; create table t1 (a int); show slave status; Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Replicate_do_table Replicate_ignore_table Replicate_wild_do_table Replicate_wild_ignore_table Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space Until_condition Until_Log_File Until_Log_pos Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key -127.0.0.1 root MASTER_PORT 1 master-bin.000001 50535 slave-relay-bin.000009 62 master-bin.000001 Yes Yes 0 0 50535 62 None 0 No +127.0.0.1 root MASTER_PORT 1 master-bin.000001 50535 slave-relay-bin.000009 62 master-bin.000001 Yes Yes 0 0 50535 # None 0 No flush logs; drop table t1; show slave status; Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Replicate_do_table Replicate_ignore_table Replicate_wild_do_table Replicate_wild_ignore_table Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space Until_condition Until_Log_File Until_Log_pos Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key -127.0.0.1 root MASTER_PORT 1 master-bin.000001 50583 slave-relay-bin.000010 52 master-bin.000001 Yes Yes 0 0 50583 52 None 0 No +127.0.0.1 root MASTER_PORT 1 master-bin.000001 50583 slave-relay-bin.000010 52 master-bin.000001 Yes Yes 0 0 50583 # None 0 No flush logs; show master status; File Position Binlog_do_db Binlog_ignore_db diff --git a/mysql-test/t/innodb.test b/mysql-test/t/innodb.test index 823ac25cf66..f298b1abf53 100644 --- a/mysql-test/t/innodb.test +++ b/mysql-test/t/innodb.test @@ -141,7 +141,9 @@ create table t1 (n int not null primary key) type=innodb; start transaction; insert into t1 values (4); flush tables with read lock; ---error 1223; +# +# Current code can't handle a read lock in middle of transaction +#--error 1223; commit; unlock tables; commit; diff --git a/mysql-test/t/rpl_max_relay_size.test b/mysql-test/t/rpl_max_relay_size.test index a2167b1ef36..eb38ffd3af3 100644 --- a/mysql-test/t/rpl_max_relay_size.test +++ b/mysql-test/t/rpl_max_relay_size.test @@ -70,6 +70,7 @@ save_master_pos; connection slave; sync_with_master; --replace_result $MASTER_MYPORT MASTER_PORT 3306 MASTER_PORT 3334 MASTER_PORT +--replace_column 22 # show slave status; # one more rotation, to be sure Relay_log_space is correctly updated flush logs; @@ -79,6 +80,7 @@ save_master_pos; connection slave; sync_with_master; --replace_result $MASTER_MYPORT MASTER_PORT 3306 MASTER_PORT 3334 MASTER_PORT +--replace_column 22 # show slave status; connection master; diff --git a/sql/handler.cc b/sql/handler.cc index e14e326792d..a8e9f9cf50a 100644 --- a/sql/handler.cc +++ b/sql/handler.cc @@ -359,10 +359,7 @@ int ha_commit_trans(THD *thd, THD_TRANS* trans) if (trans == &thd->transaction.all && mysql_bin_log.is_open() && my_b_tell(&thd->transaction.trans_log)) { - if (wait_if_global_read_lock(thd, 0)) - DBUG_RETURN(1); mysql_bin_log.write(thd, &thd->transaction.trans_log, 1); - start_waiting_global_read_lock(thd); reinit_io_cache(&thd->transaction.trans_log, WRITE_CACHE, (my_off_t) 0, 0, 1); thd->transaction.trans_log.end_of_file= max_binlog_cache_size; diff --git a/sql/opt_range.cc b/sql/opt_range.cc index 5b1e2c98001..24768537e3d 100644 --- a/sql/opt_range.cc +++ b/sql/opt_range.cc @@ -456,7 +456,7 @@ SEL_ARG *SEL_ARG::clone(SEL_ARG *new_parent,SEL_ARG **next_arg) SEL_ARG *tmp; if (type != KEY_RANGE) { - if(!(tmp=new SEL_ARG(type))) + if (!(tmp=new SEL_ARG(type))) return 0; // out of memory tmp->prev= *next_arg; // Link into next/prev chain (*next_arg)->next=tmp; @@ -464,7 +464,7 @@ SEL_ARG *SEL_ARG::clone(SEL_ARG *new_parent,SEL_ARG **next_arg) } else { - if(!(tmp=new SEL_ARG(field,part, min_value,max_value, + if (!(tmp=new SEL_ARG(field,part, min_value,max_value, min_flag, max_flag, maybe_flag))) return 0; // out of memory tmp->parent=new_parent; @@ -920,7 +920,7 @@ get_mm_parts(PARAM *param, Field *field, Item_func::Functype type, } else { // This key may be used later - if(!(sel_arg=new SEL_ARG(SEL_ARG::MAYBE_KEY))) + if (!(sel_arg=new SEL_ARG(SEL_ARG::MAYBE_KEY))) DBUG_RETURN(0); // out of memory } sel_arg->part=(uchar) key_part->part; @@ -1488,7 +1488,7 @@ key_or(SEL_ARG *key1,SEL_ARG *key2) SEL_ARG *key2_next=key2->next; if (key2_shared) { - if(!(key2=new SEL_ARG(*key2))) + if (!(key2=new SEL_ARG(*key2))) return 0; // out of memory key2->increment_use_count(key1->use_count+1); key2->next=key2_next; // New copy of key2 @@ -2333,7 +2333,7 @@ get_quick_keys(PARAM *param,QUICK_SELECT *quick,KEY_PART *key, } /* Get range for retrieving rows in QUICK_SELECT::get_next */ - if(!(range= new QUICK_RANGE(param->min_key, + if (!(range= new QUICK_RANGE(param->min_key, (uint) (tmp_min_key - param->min_key), param->max_key, (uint) (tmp_max_key - param->max_key), diff --git a/sql/sql_db.cc b/sql/sql_db.cc index d48022f5829..cd0445b42e2 100644 --- a/sql/sql_db.cc +++ b/sql/sql_db.cc @@ -393,16 +393,16 @@ exit: start_waiting_global_read_lock(thd); /* If this database was the client's selected database, we silently change the - client's selected database to nothing (to have an empty SELECT DATABASE() in - the future). For this we free() thd->db and set it to 0. But we don't do + client's selected database to nothing (to have an empty SELECT DATABASE() + in the future). For this we free() thd->db and set it to 0. But we don't do free() for the slave thread. Indeed, doing a x_free() on it leads to nasty problems (i.e. long painful debugging) because in this thread, thd->db is the same as data_buf and db of the Query_log_event which is dropping the - database. So if you free() thd->db, you're freeing data_buf. You set thd->db - to 0 but not data_buf (thd->db and data_buf are two distinct pointers which - point to the same place). Then in ~Query_log_event(), we have - 'if (data_buf) free(data_buf)' - data_buf is !=0 so this makes a DOUBLE free(). + database. So if you free() thd->db, you're freeing data_buf. You set + thd->db to 0 but not data_buf (thd->db and data_buf are two distinct + pointers which point to the same place). Then in ~Query_log_event(), we + have 'if (data_buf) free(data_buf)' data_buf is !=0 so this makes a + DOUBLE free(). Side effects of this double free() are, randomly (depends on the machine), when the slave is replicating a DROP DATABASE: - garbage characters in the error message: diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index b36d4041950..e30fd0acfae 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -4449,7 +4449,10 @@ bool reload_acl_and_cache(THD *thd, ulong options, TABLE_LIST *tables, { if ((options & REFRESH_READ_LOCK) && thd) { - // writing to the binlog could cause deadlocks, as we don't log UNLOCK TABLES + /* + Writing to the binlog could cause deadlocks, as we don't log + UNLOCK TABLES + */ tmp_write_to_binlog= 0; if (lock_global_read_lock(thd)) return 1; diff --git a/sql/sql_repl.cc b/sql/sql_repl.cc index 7bb51989cc3..2345355922c 100644 --- a/sql/sql_repl.cc +++ b/sql/sql_repl.cc @@ -730,7 +730,7 @@ int start_slave(THD* thd , MASTER_INFO* mi, bool net_report) to p, no digits were found, error. If it contains '\0' it means conversion went ok. */ - if(p_end==p || *p_end) + if (p_end==p || *p_end) slave_errno=ER_BAD_SLAVE_UNTIL_COND; } else @@ -753,7 +753,7 @@ int start_slave(THD* thd , MASTER_INFO* mi, bool net_report) ER(ER_UNTIL_COND_IGNORED)); - if(!slave_errno) + if (!slave_errno) slave_errno = start_slave_threads(0 /*no mutex */, 1 /* wait for start */, mi, diff --git a/sql/sql_select.cc b/sql/sql_select.cc index f142db044ce..4bab97d4a46 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -5333,7 +5333,7 @@ do_select(JOIN *join,List<Item> *fields,TABLE *table,Procedure *procedure) HAVING will be chcked after processing aggregate functions, But WHERE should checkd here (we alredy have read tables) */ - if(!join->conds || join->conds->val_int()) + if (!join->conds || join->conds->val_int()) { if (!(error=(*end_select)(join,join_tab,0)) || error == -3) error=(*end_select)(join,join_tab,1); |