diff options
-rw-r--r-- | mysql-test/t/rpl_get_lock.test | 7 | ||||
-rw-r--r-- | sql/sql_parse.cc | 21 |
2 files changed, 20 insertions, 8 deletions
diff --git a/mysql-test/t/rpl_get_lock.test b/mysql-test/t/rpl_get_lock.test index 8bbeeade468..3c33103e4c7 100644 --- a/mysql-test/t/rpl_get_lock.test +++ b/mysql-test/t/rpl_get_lock.test @@ -1,17 +1,16 @@ source include/master-slave.inc; connection master; create table t1(n int); -create table t2(n int); insert into t1 values(get_lock("lock",2)); dirty_close master; connection master1; select get_lock("lock",2); select release_lock("lock"); -let $1=20000; +let $1=2000; while ($1) { - select get_lock("lock",2); - select release_lock("lock"); + do get_lock("lock",2); + do release_lock("lock"); dec $1; } save_master_pos; diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index dd627017ead..48b48dc77a7 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -1071,10 +1071,23 @@ mysql_execute_command(void) TABLE_LIST *tables=(TABLE_LIST*) lex->table_list.first; DBUG_ENTER("mysql_execute_command"); - if(table_rules_on && thd->slave_thread && tables && !tables_ok(thd,tables)) - DBUG_VOID_RETURN; // skip if we are in the slave thread, some table - // rules have been given and the table list says the query should not be - // replicated + if (thd->slave_thread) + { + // skip if we are in the slave thread, some table + // rules have been given and the table list says the query should not be + // replicated + if(table_rules_on && tables && !tables_ok(thd,tables)) + DBUG_VOID_RETURN; + // this is a workaround to deal with the shortcoming + // in 3.23.44-3.23.46 masters + // in RELEASE_LOCK() logging. We re-write SELECT RELEASE_LOCK() as + // DO RELEASE_LOCK() + if (lex->sql_command == SQLCOM_SELECT) + { + lex->sql_command = SQLCOM_DO; + lex->insert_list = &lex->item_list; + } + } thread_safe_increment(com_stat[lex->sql_command],&LOCK_thread_count); switch (lex->sql_command) { |