diff options
author | unknown <sasha@mysql.sashanet.com> | 2002-01-31 11:04:49 -0700 |
---|---|---|
committer | unknown <sasha@mysql.sashanet.com> | 2002-01-31 11:04:49 -0700 |
commit | 8612588aeb74cc1a3252206da9c14cd83f392b4e (patch) | |
tree | bd625aaa09009624436017b04d9f7584655ced93 | |
parent | f5a75e7965c781389128b3163e1c37c6f5fc71bd (diff) | |
parent | 1d76e90c1b61981e284bd583e54345cce9fe3551 (diff) | |
download | mariadb-git-8612588aeb74cc1a3252206da9c14cd83f392b4e.tar.gz |
Merge work:/home/bk/mysql-4.0
into mysql.sashanet.com:/reiser-data/mysql-4.0
sql/item_func.cc:
Auto merged
sql/slave.cc:
Auto merged
-rw-r--r-- | include/my_global.h | 10 | ||||
-rw-r--r-- | mysql-test/t/rpl000001.test | 23 | ||||
-rw-r--r-- | mysys/mf_iocache.c | 1 | ||||
-rw-r--r-- | mysys/mf_iocache2.c | 10 | ||||
-rw-r--r-- | sql/item_func.cc | 3 | ||||
-rw-r--r-- | sql/slave.cc | 2 |
6 files changed, 43 insertions, 6 deletions
diff --git a/include/my_global.h b/include/my_global.h index a5fe99d5271..6a7385e18a2 100644 --- a/include/my_global.h +++ b/include/my_global.h @@ -51,6 +51,16 @@ #endif #endif /* _WIN32... */ +/* sometimes we want to make sure that the variable is not put into + a register in debugging mode so we can see its value in the core +*/ + +#ifndef DBUG_OFF +#define dbug_volatile volatile +#else +#define dbug_volatile +#endif + /* The macros below are borrowed from include/linux/compiler.h in the Linux kernel. Use them to indicate the likelyhood of the truthfulness diff --git a/mysql-test/t/rpl000001.test b/mysql-test/t/rpl000001.test index 57b81cb9e33..597b1c69b1e 100644 --- a/mysql-test/t/rpl000001.test +++ b/mysql-test/t/rpl000001.test @@ -27,21 +27,38 @@ sync_with_master; connection master; reset master; connection slave; +slave stop; reset slave; connection master; drop table if exists t1,t2; create table t1(n int); -let $1=10; +#we want the log to exceed 16K to test deal with the log that is bigger than +#IO_SIZE +let $1=5000; +disable_query_log; while ($1) { - eval insert into t1 values($1); + eval insert into t1 values($1+get_lock("hold_slave",10)*0); dec $1; } +enable_query_log; + +#try to cause a large relay log lag on the slave +connection slave; +select get_lock("hold_slave",10); +slave start; +#hope this is long enough for I/O thread to fetch over 16K relay log data +sleep 1; +select release_lock("hold_slave"); +unlock tables; + +connection master; create table t2(id int); insert into t2 values(connection_id()); save_master_pos; + connection master1; #avoid generating result create temporary table t1_temp(n int); @@ -60,7 +77,7 @@ reap; connection slave; sync_with_master ; #give the slave a chance to exit -sleep 0.5; +wait_for_slave_to_stop; # The following test can't be done because the result of Pos will differ # on different computers diff --git a/mysys/mf_iocache.c b/mysys/mf_iocache.c index 6095cc23716..872757f77c5 100644 --- a/mysys/mf_iocache.c +++ b/mysys/mf_iocache.c @@ -823,6 +823,7 @@ int my_b_append(register IO_CACHE *info, const byte *Buffer, uint Count) } Count-=length; Buffer+=length; + info->end_of_file+=length; } end: diff --git a/mysys/mf_iocache2.c b/mysys/mf_iocache2.c index a343829d32e..00ebf1e6846 100644 --- a/mysys/mf_iocache2.c +++ b/mysys/mf_iocache2.c @@ -27,7 +27,10 @@ my_off_t my_b_append_tell(IO_CACHE* info) { - my_off_t res; + /* prevent optimizer from putting res in a register when debugging + we need this to be able to see the value of res when the assert fails + */ + dbug_volatile my_off_t res; /* we need to lock the append buffer mutex to keep flush_io_cache() from messing with the variables that we need in order to provide the answer to the question. @@ -35,8 +38,11 @@ my_off_t my_b_append_tell(IO_CACHE* info) #ifdef THREAD pthread_mutex_lock(&info->append_buffer_lock); #endif + /* save the value of my_tell in res so we can see it when studying + coredump + */ DBUG_ASSERT(info->end_of_file - (info->append_read_pos-info->write_buffer) - == my_tell(info->file,MYF(0))); + == (res=my_tell(info->file,MYF(0)))); res = info->end_of_file + (info->write_pos-info->append_read_pos); #ifdef THREAD pthread_mutex_unlock(&info->append_buffer_lock); diff --git a/sql/item_func.cc b/sql/item_func.cc index 5dcc638235f..1818a755a43 100644 --- a/sql/item_func.cc +++ b/sql/item_func.cc @@ -1433,16 +1433,19 @@ void item_user_lock_release(ULL *ull) if (mysql_bin_log.is_open()) { THD *thd = current_thd; + uint save_query_length; char buf[256]; String tmp(buf,sizeof(buf)); tmp.length(0); tmp.append("DO RELEASE_LOCK(\""); tmp.append(ull->key,ull->key_length); tmp.append("\")"); + save_query_length=thd->query_length; thd->query_length=tmp.length(); Query_log_event qev(thd,tmp.ptr()); qev.error_code=0; // this query is always safe to run on slave mysql_bin_log.write(&qev); + thd->query_length=save_query_length; } if (--ull->count) pthread_cond_signal(&ull->cond); diff --git a/sql/slave.cc b/sql/slave.cc index f9dbf4641e6..8884e5de778 100644 --- a/sql/slave.cc +++ b/sql/slave.cc @@ -2010,7 +2010,7 @@ static int queue_old_event(MASTER_INFO *mi, const char *buf, mi->master_log_pos += event_len; if (unlikely(processed_stop_event)) mi->ignore_stop_event=1; - pthread_mutex_lock(&mi->data_lock); + pthread_mutex_unlock(&mi->data_lock); return 0; } |