Commit ab862785 authored by unknown's avatar unknown

replicated get_lock() properly


sql/item_func.cc:
  log all lock releases to binary log for safe handling of get_lock()
  in updates
parent 8b3129f0
get_lock("lock",3)
1
n
1
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;
...@@ -1399,6 +1399,23 @@ void item_user_lock_free(void) ...@@ -1399,6 +1399,23 @@ void item_user_lock_free(void)
void item_user_lock_release(ULL *ull) void item_user_lock_release(ULL *ull)
{ {
ull->locked=0; 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) if (--ull->count)
pthread_cond_signal(&ull->cond); pthread_cond_signal(&ull->cond);
else else
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment