summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Docs/manual.texi2
-rw-r--r--include/my_bitmap.h5
-rw-r--r--mysql-test/r/rpl_get_lock.result4
-rw-r--r--mysql-test/t/rpl_get_lock.test1
-rw-r--r--mysys/my_bitmap.c7
-rw-r--r--sql/slave.cc35
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++;
}
}