From 9cbc19c8b49764d72c1e43ccd97f299c720b53ef Mon Sep 17 00:00:00 2001
From: unknown <sasha@mysql.sashanet.com>
Date: Wed, 12 Dec 2001 18:55:33 -0700
Subject: slave-skip-errors added extra/mysql_install.c - will work on it in
 4.0, but it does not hurt to have it sit in 3.23 tree for now since it will
 eventually be backported to 3.23 anyway

Docs/manual.texi:
  documented slave-skip-errors
  updated change history
extra/resolve_stack_dump.c:
  fixed wrong help message
include/my_bitmap.h:
  bitmap code updates
mysql-test/r/rpl_get_lock.result:
  test for a possible bug in release_lock() replication
mysql-test/t/rpl_get_lock.test:
  test for possible bug in release_lock replication
mysys/my_bitmap.c:
  bitmap code updates/clean-up
sql/mysqld.cc:
  slave-skip-errors
sql/slave.cc:
  slave-skip-errors
sql/slave.h:
  slave skip errors
---
 mysys/my_bitmap.c | 52 +++++++++++++++++++++++++++++++++++++++++++++-------
 1 file changed, 45 insertions(+), 7 deletions(-)

(limited to 'mysys/my_bitmap.c')

diff --git a/mysys/my_bitmap.c b/mysys/my_bitmap.c
index f30298922df..ba0a5df95c6 100644
--- a/mysys/my_bitmap.c
+++ b/mysys/my_bitmap.c
@@ -26,14 +26,32 @@
 #include "mysys_priv.h"
 #include <my_bitmap.h>
 #include <assert.h>
+#include <string.h>
 
-my_bool bitmap_init(MY_BITMAP *map, uint bitmap_size)
+inline void bitmap_lock(MY_BITMAP* map)
+{
+#ifdef THREAD
+  if (map->thread_safe)
+    pthread_mutex_lock(&map->mutex);
+#endif
+}
+
+inline void bitmap_unlock(MY_BITMAP* map)
+{
+#ifdef THREAD
+  if (map->thread_safe)
+    pthread_mutex_unlock(&map->mutex);
+#endif
+}
+
+my_bool bitmap_init(MY_BITMAP *map, uint bitmap_size, my_bool thread_safe)
 {
   if (!(map->bitmap=(uchar*) my_malloc((bitmap_size+7)/8,
 				       MYF(MY_WME | MY_ZEROFILL))))
     return 1;
   dbug_assert(bitmap_size != ~(uint) 0);
 #ifdef THREAD
+  map->thread_safe = thread_safe;
   pthread_mutex_init(&map->mutex, MY_MUTEX_INIT_FAST);
 #endif
   map->bitmap_size=bitmap_size;
@@ -56,9 +74,9 @@ void bitmap_set_bit(MY_BITMAP *map, uint bitmap_bit)
 {
   if (bitmap_bit < map->bitmap_size)
   {
-    pthread_mutex_lock(&map->mutex);
+    bitmap_lock(map);
     map->bitmap[bitmap_bit / 8] |= (1 << (bitmap_bit & 7));
-    pthread_mutex_unlock(&map->mutex);
+    bitmap_unlock(map);
   }
 }
 
@@ -70,7 +88,7 @@ uint bitmap_set_next(MY_BITMAP *map)
   uint bitmap_size=map->bitmap_size;
   uint i;
 
-  pthread_mutex_lock(&map->mutex);
+  bitmap_lock(map);
   for (i=0; i < bitmap_size ; i++, bitmap++)
   {
     if (*bitmap != 0xff)
@@ -88,7 +106,7 @@ uint bitmap_set_next(MY_BITMAP *map)
       break;					/* Found bit */
     }
   }
-  pthread_mutex_unlock(&map->mutex);
+  bitmap_unlock(map);
   return bit_found;
 }
 
@@ -97,9 +115,29 @@ void bitmap_clear_bit(MY_BITMAP *map, uint bitmap_bit)
 {
   if (bitmap_bit < map->bitmap_size)
   {
-    pthread_mutex_lock(&map->mutex);
+    bitmap_lock(map);
     map->bitmap[bitmap_bit / 8] &= ~ (1 << (bitmap_bit & 7));
-    pthread_mutex_unlock(&map->mutex);
+    bitmap_unlock(map);
   }
 }
 
+void bitmap_set_all(MY_BITMAP* map)
+{
+  bitmap_lock(map);
+  memset(map->bitmap, 0xff, (map->bitmap_size+7)/8);
+  bitmap_unlock(map);
+}
+
+my_bool bitmap_is_set(MY_BITMAP* map, uint bitmap_bit)
+{
+  return (bitmap_bit < map->bitmap_size) ?
+    (map->bitmap[bitmap_bit / 8] & (1 << (bitmap_bit & 7))) :
+    0;
+}
+
+void bitmap_clear_all(MY_BITMAP* map)
+{
+  bitmap_lock(map);
+  bzero(map->bitmap,(map->bitmap_size+7)/8);
+  bitmap_unlock(map);
+}
-- 
cgit v1.2.1