diff options
-rw-r--r-- | Docs/manual.texi | 2 | ||||
-rw-r--r-- | include/my_bitmap.h | 5 | ||||
-rw-r--r-- | mysql-test/r/rpl_get_lock.result | 4 | ||||
-rw-r--r-- | mysql-test/t/rpl_get_lock.test | 1 | ||||
-rw-r--r-- | mysys/my_bitmap.c | 7 | ||||
-rw-r--r-- | sql/slave.cc | 35 |
6 files changed, 23 insertions, 31 deletions
diff --git a/Docs/manual.texi b/Docs/manual.texi index ad6aa0b1fd4..a5567f00566 100644 --- a/Docs/manual.texi +++ b/Docs/manual.texi @@ -46872,6 +46872,8 @@ Added @code{slave-skip-errors} option Added statistics variables for all MySQL commands. (@code{SHOW STATUS} is now much longer). @item +Fixed default values for InnoDB tables. +@item Fixed that @code{GROUP BY expr DESC} works. @item Fixed bug when using @code{t1 LEFT JOIN t2 ON t2.key=constant}. diff --git a/include/my_bitmap.h b/include/my_bitmap.h index 313d3f747e3..3243e5f0b24 100644 --- a/include/my_bitmap.h +++ b/include/my_bitmap.h @@ -27,10 +27,11 @@ typedef struct st_bitmap uchar *bitmap; uint bitmap_size; my_bool thread_safe; /* set if several threads access the bitmap */ - /* mutex will be acquired for the duration of each bitmap operation if + /* + mutex will be acquired for the duration of each bitmap operation if thread_safe flag is set. Otherwise, we optimize by not acquiring the mutex - */ + */ #ifdef THREAD pthread_mutex_t mutex; #endif diff --git a/mysql-test/r/rpl_get_lock.result b/mysql-test/r/rpl_get_lock.result index 4cabeaf155f..84749c1a9b1 100644 --- a/mysql-test/r/rpl_get_lock.result +++ b/mysql-test/r/rpl_get_lock.result @@ -1,5 +1,7 @@ +get_lock("lock",2) +1 release_lock("lock") -0 +1 get_lock("lock",3) 1 n diff --git a/mysql-test/t/rpl_get_lock.test b/mysql-test/t/rpl_get_lock.test index d4b5bffc409..93f911e01d5 100644 --- a/mysql-test/t/rpl_get_lock.test +++ b/mysql-test/t/rpl_get_lock.test @@ -4,6 +4,7 @@ create table t1(n int); insert into t1 values(get_lock("lock",2)); dirty_close master; connection master1; +select get_lock("lock",2); select release_lock("lock"); save_master_pos; connection slave; diff --git a/mysys/my_bitmap.c b/mysys/my_bitmap.c index ba0a5df95c6..6bab35eabb1 100644 --- a/mysys/my_bitmap.c +++ b/mysys/my_bitmap.c @@ -51,8 +51,8 @@ my_bool bitmap_init(MY_BITMAP *map, uint bitmap_size, my_bool thread_safe) return 1; dbug_assert(bitmap_size != ~(uint) 0); #ifdef THREAD - map->thread_safe = thread_safe; - pthread_mutex_init(&map->mutex, MY_MUTEX_INIT_FAST); + if ((map->thread_safe = thread_safe)) + pthread_mutex_init(&map->mutex, MY_MUTEX_INIT_FAST); #endif map->bitmap_size=bitmap_size; return 0; @@ -65,7 +65,8 @@ void bitmap_free(MY_BITMAP *map) my_free((char*) map->bitmap, MYF(0)); map->bitmap=0; #ifdef THREAD - pthread_mutex_destroy(&map->mutex); + if (map->thread_safe) + pthread_mutex_destroy(&map->mutex); #endif } } diff --git a/sql/slave.cc b/sql/slave.cc index 33097bb7df1..ee8b82052b7 100644 --- a/sql/slave.cc +++ b/sql/slave.cc @@ -78,8 +78,7 @@ static byte* get_table_key(TABLE_RULE_ENT* e, uint* len, /* called from get_options() in mysqld.cc on start-up */ void init_slave_skip_errors(char* arg) { - char* p,*end; - int err_code = 0; + char* p; my_bool last_was_digit = 0; if (bitmap_init(&slave_error_mask,MAX_SLAVE_ERROR,0)) { @@ -89,34 +88,20 @@ void init_slave_skip_errors(char* arg) use_slave_mask = 1; for (;isspace(*arg);++arg) /* empty */; - /* force first three chars to lower case */ - for (p = arg, end = arg + 3; *p && p < end; ++p) - *p = tolower(*p); - if (!memcmp(arg,"all",3)) + if (!my_casecmp(arg,"all",3)) { bitmap_set_all(&slave_error_mask); return; } - for (p = arg, end = strend(arg); p < end; ++p) + for (p= arg ; *p; ) { - int digit = *p - '0'; - if (digit >= 0 && digit < 10) /* found real digit */ - { - err_code = err_code * 10 + digit; - last_was_digit = 1; - } - else /* delimiter */ - { - if (last_was_digit) - { - if (err_code < MAX_SLAVE_ERROR) - { - bitmap_set_bit(&slave_error_mask,err_code); - } - err_code = 0; - last_was_digit = 0; - } - } + long err_code; + if (!(p= str2int(p, 10, 0, LONG_MAX, &err_code))) + break; + if (err_code < MAX_SLAVE_ERROR) + bitmap_set_bit(&slave_error_mask,(uint)err_code); + while (!isdigit(*p) && *p) + p++; } } |