summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mysql-test/suite/rpl/t/rpl_empty_master_host.test1
-rw-r--r--mysql-test/suite/rpl/t/rpl_server_id_ignore.test1
-rw-r--r--sql/sql_class.cc5
-rw-r--r--sql/sql_lex.cc1
-rw-r--r--sql/sql_lex.h1
-rw-r--r--sql/sql_repl.cc1
-rw-r--r--sql/sql_yacc.yy15
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));
}