summaryrefslogtreecommitdiff
path: root/sql/mdl.h
diff options
context:
space:
mode:
Diffstat (limited to 'sql/mdl.h')
-rw-r--r--sql/mdl.h43
1 files changed, 29 insertions, 14 deletions
diff --git a/sql/mdl.h b/sql/mdl.h
index a86b45e180f..944c6bb6349 100644
--- a/sql/mdl.h
+++ b/sql/mdl.h
@@ -37,6 +37,24 @@ class MDL_lock;
class MDL_ticket;
/**
+ @def ENTER_COND(C, M, S, O)
+ Start a wait on a condition.
+ @param C the condition to wait on
+ @param M the associated mutex
+ @param S the new stage to enter
+ @param O the previous stage
+ @sa EXIT_COND().
+*/
+#define ENTER_COND(C, M, S, O) enter_cond(C, M, S, O, __func__, __FILE__, __LINE__)
+
+/**
+ @def EXIT_COND(S)
+ End a wait on a condition
+ @param S the new stage to enter
+*/
+#define EXIT_COND(S) exit_cond(S, __func__, __FILE__, __LINE__)
+
+/**
Type of metadata lock request.
@sa Comments for MDL_object_lock::can_grant_lock() and
@@ -189,6 +207,10 @@ enum enum_mdl_duration {
class MDL_key
{
public:
+#ifdef HAVE_PSI_INTERFACE
+ static void init_psi_keys();
+#endif
+
/**
Object namespaces.
Sic: when adding a new member to this enum make sure to
@@ -291,16 +313,16 @@ public:
Get thread state name to be used in case when we have to
wait on resource identified by key.
*/
- const char * get_wait_state_name() const
+ const PSI_stage_info * get_wait_state_name() const
{
- return m_namespace_to_wait_state_name[(int)mdl_namespace()];
+ return & m_namespace_to_wait_state_name[(int)mdl_namespace()];
}
private:
uint16 m_length;
uint16 m_db_name_length;
char m_ptr[MAX_MDLKEY_LENGTH];
- static const char * m_namespace_to_wait_state_name[NAMESPACE_END];
+ static PSI_stage_info m_namespace_to_wait_state_name[NAMESPACE_END];
private:
MDL_key(const MDL_key &); /* not implemented */
MDL_key &operator=(const MDL_key &); /* not implemented */
@@ -600,8 +622,10 @@ public:
bool set_status(enum_wait_status result_arg);
enum_wait_status get_status();
void reset_status();
- enum_wait_status timed_wait(THD *thd, struct timespec *abs_timeout,
- bool signal_timeout, const char *wait_state_name);
+ enum_wait_status timed_wait(THD *thd,
+ struct timespec *abs_timeout,
+ bool signal_timeout,
+ const PSI_stage_info *wait_state_name);
private:
/**
Condvar which is used for waiting until this context's pending
@@ -846,16 +870,8 @@ private:
void mdl_init();
void mdl_destroy();
-
-/*
- Functions in the server's kernel used by metadata locking subsystem.
-*/
-
extern bool mysql_notify_thread_having_shared_lock(THD *thd, THD *in_use,
bool needs_thr_lock_abort);
-extern "C" const char* thd_enter_cond(MYSQL_THD thd, mysql_cond_t *cond,
- mysql_mutex_t *mutex, const char *msg);
-extern "C" void thd_exit_cond(MYSQL_THD thd, const char *old_msg);
extern "C" unsigned long thd_get_thread_id(const MYSQL_THD thd);
/**
@@ -868,7 +884,6 @@ extern "C" unsigned long thd_get_thread_id(const MYSQL_THD thd);
*/
extern "C" int thd_is_connected(MYSQL_THD thd);
-
#ifndef DBUG_OFF
extern mysql_mutex_t LOCK_open;
#endif