diff options
-rw-r--r-- | mysql-test/suite/rpl/t/rpl_empty_master_host.test | 1 | ||||
-rw-r--r-- | mysql-test/suite/rpl/t/rpl_server_id_ignore.test | 1 | ||||
-rw-r--r-- | sql/sql_class.cc | 5 | ||||
-rw-r--r-- | sql/sql_lex.cc | 1 | ||||
-rw-r--r-- | sql/sql_lex.h | 1 | ||||
-rw-r--r-- | sql/sql_repl.cc | 1 | ||||
-rw-r--r-- | sql/sql_yacc.yy | 15 |
7 files changed, 19 insertions, 6 deletions
diff --git a/mysql-test/suite/rpl/t/rpl_empty_master_host.test b/mysql-test/suite/rpl/t/rpl_empty_master_host.test index df0c85ad7ec..66d30375a59 100644 --- a/mysql-test/suite/rpl/t/rpl_empty_master_host.test +++ b/mysql-test/suite/rpl/t/rpl_empty_master_host.test @@ -17,6 +17,7 @@ # working when expected. --source include/master-slave.inc +--source include/have_binlog_format_mixed.inc connection slave; STOP SLAVE; diff --git a/mysql-test/suite/rpl/t/rpl_server_id_ignore.test b/mysql-test/suite/rpl/t/rpl_server_id_ignore.test index 004f4daa19d..1e6d46c9d40 100644 --- a/mysql-test/suite/rpl/t/rpl_server_id_ignore.test +++ b/mysql-test/suite/rpl/t/rpl_server_id_ignore.test @@ -18,6 +18,7 @@ # executing events this time source include/master-slave.inc; +source include/have_binlog_format_mixed.inc; connection slave; diff --git a/sql/sql_class.cc b/sql/sql_class.cc index 9b5772d3d07..a644729961c 100644 --- a/sql/sql_class.cc +++ b/sql/sql_class.cc @@ -1673,6 +1673,11 @@ void THD::cleanup_after_query() /* reset table map for multi-table update */ table_map_for_update= 0; m_binlog_invoker= FALSE; + /* reset replication info structure */ + if (lex && lex->mi.repl_ignore_server_ids.buffer) + { + delete_dynamic(&lex->mi.repl_ignore_server_ids); + } } diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc index 869a5916339..0cabab9fae7 100644 --- a/sql/sql_lex.cc +++ b/sql/sql_lex.cc @@ -2351,6 +2351,7 @@ LEX::LEX() plugins_static_buffer, INITIAL_LEX_PLUGIN_LIST_SIZE, INITIAL_LEX_PLUGIN_LIST_SIZE); + memset(&mi, 0, sizeof(LEX_MASTER_INFO)); reset_query_tables_list(TRUE); } diff --git a/sql/sql_lex.h b/sql/sql_lex.h index 542e8b42ae2..440828a2669 100644 --- a/sql/sql_lex.h +++ b/sql/sql_lex.h @@ -292,6 +292,7 @@ typedef struct st_lex_master_info char *relay_log_name; ulong relay_log_pos; DYNAMIC_ARRAY repl_ignore_server_ids; + typeof(::server_id) server_ids_buffer[2]; } LEX_MASTER_INFO; typedef struct st_lex_reset_slave diff --git a/sql/sql_repl.cc b/sql/sql_repl.cc index 00c85d8eb43..5300a327029 100644 --- a/sql/sql_repl.cc +++ b/sql/sql_repl.cc @@ -1689,7 +1689,6 @@ err: thd_proc_info(thd, 0); if (ret == FALSE) my_ok(thd); - delete_dynamic(&lex_mi->repl_ignore_server_ids); //freeing of parser-time alloc DBUG_RETURN(ret); } diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index 87c3ae5b129..8f3e6373666 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -1863,12 +1863,9 @@ change: LEX *lex = Lex; lex->sql_command = SQLCOM_CHANGE_MASTER; bzero((char*) &lex->mi, sizeof(lex->mi)); - /* - resetting flags that can left from the previous CHANGE MASTER - */ lex->mi.repl_ignore_server_ids_opt= LEX_MASTER_INFO::LEX_MI_UNCHANGED; - my_init_dynamic_array(&Lex->mi.repl_ignore_server_ids, - sizeof(::server_id), 16, 16); + + DBUG_ASSERT(Lex->mi.repl_ignore_server_ids.elements == 0); } master_defs {} @@ -1979,6 +1976,14 @@ ignore_server_id_list: ignore_server_id: ulong_num { + if (Lex->mi.repl_ignore_server_ids.elements == 0) + { + my_init_dynamic_array2(&Lex->mi.repl_ignore_server_ids, + sizeof(::server_id), + Lex->mi.server_ids_buffer, + array_elements(Lex->mi.server_ids_buffer), + 16); + } insert_dynamic(&Lex->mi.repl_ignore_server_ids, (uchar*) &($1)); } |