#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#46272 | Konstantin Osipov | 29 Jan |