List:Commits« Previous MessageNext Message »
From:Konstantin Osipov Date:January 29 2010 3:46pm
Subject:bzr commit into mysql-5.6-next-mr branch (kostja:3084) Bug#46272
View as plain text  
#At file:///opt/local/work/next-4284-stage/ based on revid:dlenev@stripped

 3084 Konstantin Osipov	2010-01-29
      Bug#46272, review comments: introduce MDL_lock::bitmap_t.

    modified:
      sql/mdl.cc
=== modified file 'sql/mdl.cc'
--- a/sql/mdl.cc	2010-01-29 15:10:10 +0000
+++ b/sql/mdl.cc	2010-01-29 15:46:50 +0000
@@ -83,8 +83,7 @@ public:
   and compatibility matrices.
 */
 
-#define MDL_BIT(A) (1 << A)
-
+#define MDL_BIT(A) static_cast<MDL_lock::bitmap_t>(1U << A)
 
 /**
   The lock context. Created internally for an acquired lock.
@@ -100,6 +99,8 @@ public:
 class MDL_lock
 {
 public:
+  typedef uchar bitmap_t;
+
   class Ticket_list
   {
   public:
@@ -114,14 +115,14 @@ public:
     void add_ticket(MDL_ticket *ticket);
     void remove_ticket(MDL_ticket *ticket);
     bool is_empty() const { return m_list.is_empty(); }
-    uchar bitmap() const { return m_bitmap; }
+    bitmap_t bitmap() const { return m_bitmap; }
   private:
     void clear_bit_if_not_in_list(enum_mdl_type type);
   private:
     /** List of tickets. */
     List m_list;
     /** Bitmap of types of tickets in this list. */
-    uchar m_bitmap;
+    bitmap_t m_bitmap;
   };
 
   typedef Ticket_list::List::Iterator Ticket_iterator;
@@ -144,8 +145,8 @@ public:
     return (m_granted.is_empty() && m_waiting.is_empty());
   }
 
-  virtual const uchar* get_incompatible_granted_types_bitmap() const = 0;
-  virtual const uchar* get_incompatible_waiting_types_bitmap() const = 0;
+  virtual const bitmap_t *incompatible_granted_types_bitmap() const = 0;
+  virtual const bitmap_t *incompatible_waiting_types_bitmap() const = 0;
 
   bool has_pending_conflicting_lock(enum_mdl_type type);
 
@@ -247,18 +248,18 @@ public:
     : MDL_lock(key_arg)
   { }
 
-  virtual const uchar* get_incompatible_granted_types_bitmap() const
+  virtual const bitmap_t *incompatible_granted_types_bitmap() const
   {
     return m_granted_incompatible;
   }
-  virtual const uchar* get_incompatible_waiting_types_bitmap() const
+  virtual const bitmap_t *incompatible_waiting_types_bitmap() const
   {
     return m_waiting_incompatible;
   }
 
 private:
-  static const uchar m_granted_incompatible[MDL_TYPE_END];
-  static const uchar m_waiting_incompatible[MDL_TYPE_END];
+  static const bitmap_t m_granted_incompatible[MDL_TYPE_END];
+  static const bitmap_t m_waiting_incompatible[MDL_TYPE_END];
 };
 
 
@@ -274,18 +275,18 @@ public:
     : MDL_lock(key_arg)
   { }
 
-  virtual const uchar* get_incompatible_granted_types_bitmap() const
+  virtual const bitmap_t *incompatible_granted_types_bitmap() const
   {
     return m_granted_incompatible;
   }
-  virtual const uchar* get_incompatible_waiting_types_bitmap() const
+  virtual const bitmap_t *incompatible_waiting_types_bitmap() const
   {
     return m_waiting_incompatible;
   }
 
 private:
-  static const uchar m_granted_incompatible[MDL_TYPE_END];
-  static const uchar m_waiting_incompatible[MDL_TYPE_END];
+  static const bitmap_t m_granted_incompatible[MDL_TYPE_END];
+  static const bitmap_t m_waiting_incompatible[MDL_TYPE_END];
 };
 
 
@@ -826,7 +827,7 @@ void MDL_lock::Ticket_list::clear_bit_if
   while ((ticket= it++))
     if (ticket->get_type() == type)
       return;
-  m_bitmap&= ~(uchar) MDL_BIT(type);
+  m_bitmap&= ~ MDL_BIT(type);
 }
 
 
@@ -838,7 +839,7 @@ void MDL_lock::Ticket_list::clear_bit_if
 void MDL_lock::Ticket_list::add_ticket(MDL_ticket *ticket)
 {
   m_list.push_front(ticket);
-  m_bitmap|= (uchar) MDL_BIT(ticket->get_type());
+  m_bitmap|= MDL_BIT(ticket->get_type());
 }
 
 
@@ -912,12 +913,12 @@ void MDL_lock::Ticket_list::remove_ticke
         type of locks we don't even have any accounting for them.
 */
 
-const uchar MDL_global_lock::m_granted_incompatible[MDL_TYPE_END] =
+const MDL_lock::bitmap_t MDL_global_lock::m_granted_incompatible[MDL_TYPE_END] =
 {
   MDL_BIT(MDL_SHARED), MDL_BIT(MDL_INTENTION_EXCLUSIVE), 0, 0, 0, 0, 0, 0
 };
 
-const uchar MDL_global_lock::m_waiting_incompatible[MDL_TYPE_END] =
+const MDL_lock::bitmap_t MDL_global_lock::m_waiting_incompatible[MDL_TYPE_END] =
 {
   MDL_BIT(MDL_SHARED), 0, 0, 0, 0, 0, 0, 0
 };
@@ -970,7 +971,8 @@ const uchar MDL_global_lock::m_waiting_i
         thanks to usage of the MDL_context::find_ticket() method.
 */
 
-const uchar MDL_object_lock::m_granted_incompatible[MDL_TYPE_END] =
+const MDL_lock::bitmap_t
+MDL_object_lock::m_granted_incompatible[MDL_TYPE_END] =
 {
   0,
   MDL_BIT(MDL_EXCLUSIVE),
@@ -990,7 +992,8 @@ const uchar MDL_object_lock::m_granted_i
 };
 
 
-const uchar MDL_object_lock::m_waiting_incompatible[MDL_TYPE_END] =
+const MDL_lock::bitmap_t
+MDL_object_lock::m_waiting_incompatible[MDL_TYPE_END] =
 {
   0,
   MDL_BIT(MDL_EXCLUSIVE),
@@ -1024,8 +1027,8 @@ MDL_lock::can_grant_lock(enum_mdl_type t
                          MDL_context *requestor_ctx) const
 {
   bool can_grant= FALSE;
-  uchar waiting_incompat_map= get_incompatible_waiting_types_bitmap()[type_arg];
-  uchar granted_incompat_map= get_incompatible_granted_types_bitmap()[type_arg];
+  bitmap_t waiting_incompat_map= incompatible_waiting_types_bitmap()[type_arg];
+  bitmap_t granted_incompat_map= incompatible_granted_types_bitmap()[type_arg];
   /*
     New lock request can be satisfied iff:
     - There are no incompatible types of satisfied requests
@@ -1093,7 +1096,7 @@ bool MDL_lock::has_pending_conflicting_l
   safe_mutex_assert_not_owner(&LOCK_open);
 
   rw_rdlock(&m_rwlock);
-  result= (m_waiting.bitmap() & get_incompatible_granted_types_bitmap()[type]);
+  result= (m_waiting.bitmap() & incompatible_granted_types_bitmap()[type]);
   rw_unlock(&m_rwlock);
   return result;
 }
@@ -1110,25 +1113,24 @@ bool MDL_lock::has_pending_conflicting_l
 
 bool MDL_ticket::has_stronger_or_equal_type(enum_mdl_type type) const
 {
-  const uchar *granted_incompatible_bitmap=
-                 m_lock->get_incompatible_granted_types_bitmap();
+  const MDL_lock::bitmap_t *
+    granted_incompat_map= m_lock->incompatible_granted_types_bitmap();
 
-  return ! (granted_incompatible_bitmap[type] &
-            ~(granted_incompatible_bitmap[m_type]));
+  return ! (granted_incompat_map[type] & ~(granted_incompat_map[m_type]));
 }
 
 
 bool MDL_ticket::is_incompatible_when_granted(enum_mdl_type type) const
 {
   return (MDL_BIT(m_type) &
-          m_lock->get_incompatible_granted_types_bitmap()[type]);
+          m_lock->incompatible_granted_types_bitmap()[type]);
 }
 
 
 bool MDL_ticket::is_incompatible_when_waiting(enum_mdl_type type) const
 {
   return (MDL_BIT(m_type) &
-          m_lock->get_incompatible_waiting_types_bitmap()[type]);
+          m_lock->incompatible_waiting_types_bitmap()[type]);
 }
 
 


Attachment: [text/bzr-bundle] bzr/kostja@sun.com-20100129154650-wmq5gczzj868s66r.bundle
Thread
bzr commit into mysql-5.6-next-mr branch (kostja:3084) Bug#46272Konstantin Osipov29 Jan