diff --git a/mysql-test/r/rpl_get_lock.result b/mysql-test/r/rpl_get_lock.result new file mode 100644 index 00000000000..c261ee2861b --- /dev/null +++ b/mysql-test/r/rpl_get_lock.result @@ -0,0 +1,4 @@ +get_lock("lock",3) +1 +n +1 diff --git a/mysql-test/t/rpl_get_lock.test b/mysql-test/t/rpl_get_lock.test new file mode 100644 index 00000000000..45adf99ed21 --- /dev/null +++ b/mysql-test/t/rpl_get_lock.test @@ -0,0 +1,16 @@ +source include/master-slave.inc; +connection master; +create table t1(n int); +insert into t1 values(get_lock("lock",2)); +dirty_close master; +connection master1; +save_master_pos; +connection slave; +sync_with_master; +select get_lock("lock",3); +select * from t1; +connection master1; +drop table t1; +save_master_pos; +connection slave; +sync_with_master; diff --git a/sql/item_func.cc b/sql/item_func.cc index 989d7709513..47adb902107 100644 --- a/sql/item_func.cc +++ b/sql/item_func.cc @@ -1399,6 +1399,23 @@ void item_user_lock_free(void) void item_user_lock_release(ULL *ull) { ull->locked=0; + if (mysql_bin_log.is_open()) + { + THD *thd = current_thd; + int save_errno; + char buf[256]; + String tmp(buf,sizeof(buf)); + tmp.length(0); + tmp.append("SELECT release_lock(\""); + tmp.append(ull->key,ull->key_length); + tmp.append("\")"); + save_errno=thd->net.last_errno; + thd->net.last_errno=0; + thd->query_length=tmp.length(); + Query_log_event qev(thd,tmp.ptr()); + mysql_bin_log.write(&qev); + thd->net.last_errno=save_errno; + } if (--ull->count) pthread_cond_signal(&ull->cond); else