MySQL  8.0.21
Source Code Documentation
debug_lock_order.cc File Reference
#include <string.h>
#include <my_stacktrace.h>
#include "my_alloc.h"
#include "my_psi_config.h"
#include "my_thread.h"
#include "mysql/psi/psi_cond.h"
#include "mysql/psi/psi_file.h"
#include "mysql/psi/psi_idle.h"
#include "mysql/psi/psi_mutex.h"
#include "mysql/psi/psi_rwlock.h"
#include "mysql/psi/psi_statement.h"
#include "mysql/psi/psi_thread.h"
#include "mysqld.h"
#include "mysqld_error.h"
#include "sql/debug_lock_order.h"
#include "sql/debug_lo_misc.h"
#include "sql/debug_lo_parser.h"
#include "sql/debug_lo_scanner.h"
#include "mysql/components/services/log_builtins.h"
#include <execinfo.h>
#include <algorithm>
#include <list>
#include <map>
#include <set>
#include <stack>
#include <vector>

Classes

class  LO_class
 
struct  tarjan_scc_state
 
struct  graph_search_state
 
class  LO_node
 
class  LO_node_finder
 
class  LO_arc
 
class  LO_graph
 
class  LO_lock
 
class  LO_thread_class
 
class  LO_thread
 
class  LO_mutex_class
 
class  LO_mutex
 
class  LO_mutex_locker
 
class  LO_mutex_lock
 
class  LO_rwlock_class
 
class  LO_rwlock_class_pr
 
class  LO_rwlock_class_rw
 
class  LO_rwlock_class_sx
 
class  LO_rwlock
 
class  LO_rwlock_pr
 
class  LO_rwlock_rw
 
class  LO_rwlock_sx
 
class  LO_rwlock_locker
 
class  LO_rwlock_lock
 
class  LO_rwlock_lock_pr
 
class  LO_rwlock_lock_rw
 
class  LO_rwlock_lock_sx
 
class  LO_cond_class
 
class  LO_cond
 
class  LO_cond_locker
 
class  LO_cond_wait
 
class  LO_file_class
 
class  LO_file
 
class  LO_file_locker
 
class  SCC_visitor
 
class  SCC_all
 
class  SCC_filter
 
class  LO_stack_trace
 
class  LO_spawn_thread_arg
 

Macros

#define safe_snprintf(B, S, F, ...)
 
#define LO_MAX_THREAD_CLASS   100
 
#define LO_MAX_MUTEX_CLASS   300
 
#define LO_MAX_RWLOCK_CLASS   100
 
#define LO_MAX_COND_CLASS   100
 
#define LO_MAX_FILE_CLASS   100
 
#define LO_MAX_NODE_NUMBER
 
#define LO_THREAD_RANGE   0
 
#define LO_MUTEX_RANGE   1000
 
#define LO_RWLOCK_RANGE   2000
 
#define LO_COND_RANGE   3000
 
#define LO_FILE_RANGE   4000
 
#define LO_MAX_QNAME_LENGTH   128
 
#define STATE_NAME_LENGTH   80
 Buffer size to safely print " STATE <state>". More...
 
#define OPERATION_NAME_LENGTH   80
 Buffer size to safely print " RECURSIVE OP <operation>". More...
 

Typedefs

typedef std::list< LO_mutex_lock * > LO_mutex_lock_list
 
typedef std::list< LO_rwlock_lock * > LO_rwlock_lock_list
 
typedef std::list< LO_node * > LO_node_list
 
typedef std::list< LO_arc * > LO_arc_list
 
typedef std::list< LO_authorised_arc * > LO_authorised_arc_list
 
typedef std::list< LO_thread * > LO_thread_list
 

Enumerations

enum  LO_node_type { NODE_TYPE_MUTEX, NODE_TYPE_RWLOCK, NODE_TYPE_COND, NODE_TYPE_FILE }
 

Functions

int LOCK_ORDER_parse (struct LO_parser_param *param)
 
static void print_file (FILE *file, const char *format,...)
 
static void debug_lock_order_break_here (const char *why)
 
static char * deep_copy_string (const char *src)
 
static void destroy_string (char *src)
 
static LO_authorised_arcdeep_copy_arc (const LO_authorised_arc *src)
 
static void destroy_arc (LO_authorised_arc *arc)
 
static LO_threadget_THR_LO ()
 
static void set_THR_LO (LO_thread *lo)
 
static void lo_register_mutex (const char *category, PSI_mutex_info *info, int count)
 
static void lo_register_rwlock (const char *category, PSI_rwlock_info *info, int count)
 
static void lo_register_cond (const char *category, PSI_cond_info *info, int count)
 
static void lo_register_thread (const char *category, PSI_thread_info *info, int count)
 
static void lo_register_file (const char *category, PSI_file_info *info, int count)
 
static void lo_register_statement_v2 (const char *category, PSI_statement_info *info, int count)
 
static PSI_mutexlo_init_mutex (PSI_mutex_key key, const void *identity)
 
static void lo_destroy_mutex (PSI_mutex *mutex)
 
static PSI_rwlocklo_init_rwlock (PSI_rwlock_key key, const void *identity)
 
static void lo_destroy_rwlock (PSI_rwlock *rwlock)
 
static PSI_condlo_init_cond (PSI_cond_key key, const void *identity)
 
static void lo_destroy_cond (PSI_cond *cond)
 
static void lo_file_bindings_insert (size_t index, LO_file *lo_file)
 
static LO_filelo_file_bindings_find (size_t index, bool remove)
 
static void lo_create_file (PSI_file_key key, const char *name, File file)
 
void * lo_spawn_thread_fct (void *arg)
 
static int lo_spawn_thread (PSI_thread_key key, my_thread_handle *thread, const my_thread_attr_t *attr, void *(*start_routine)(void *), void *arg)
 
static PSI_threadlo_new_thread (PSI_thread_key key, const void *identity, ulonglong processlist_id)
 
static void lo_set_thread_id (PSI_thread *thread, ulonglong id)
 
static ulonglong lo_get_current_thread_internal_id ()
 
static ulonglong lo_get_thread_internal_id (PSI_thread *thread)
 
static PSI_threadlo_get_thread_by_id (ulonglong processlist_id)
 
static void lo_set_thread_THD (PSI_thread *thread, THD *thd)
 
static void lo_set_thread_os_id (PSI_thread *thread)
 
static PSI_threadlo_get_thread (void)
 
static void lo_set_thread_user (const char *user, int user_len)
 
static void lo_set_thread_account (const char *user, int user_len, const char *host, int host_len)
 
static void lo_set_thread_db (const char *db, int db_len)
 
static void lo_set_thread_command (int command)
 
static void lo_set_connection_type (opaque_vio_type conn_type)
 
static void lo_set_thread_start_time (time_t start_time)
 
static void lo_set_thread_info (const char *info, uint info_len)
 
static int lo_set_thread_resource_group (const char *group_name, int group_name_len, void *user_data)
 
static int lo_set_thread_resource_group_by_id (PSI_thread *thread, ulonglong thread_id, const char *group_name, int group_name_len, void *user_data)
 
static void lo_set_thread (PSI_thread *thread)
 
static void lo_aggregate_thread_status (PSI_thread *thread)
 
static void lo_delete_current_thread (void)
 
static void lo_delete_thread (PSI_thread *thread)
 
static PSI_file_lockerlo_get_thread_file_name_locker (PSI_file_locker_state *state, PSI_file_key key, PSI_file_operation op, const char *name, const void *identity)
 
static PSI_file_lockerlo_get_thread_file_stream_locker (PSI_file_locker_state *state, PSI_file *file, PSI_file_operation op)
 
static PSI_file_lockerlo_get_thread_file_descriptor_locker (PSI_file_locker_state *state, File file, PSI_file_operation op)
 
static void lo_unlock_mutex (PSI_mutex *mutex)
 
static void lo_unlock_rwlock (PSI_rwlock *rwlock, PSI_rwlock_operation op)
 
static void lo_signal_cond (PSI_cond *cond)
 
static void lo_broadcast_cond (PSI_cond *cond)
 
static PSI_idle_lockerlo_start_idle_wait (PSI_idle_locker_state *state, const char *src_file, uint src_line)
 
static void lo_end_idle_wait (PSI_idle_locker *locker)
 
static PSI_mutex_lockerlo_start_mutex_wait (PSI_mutex_locker_state *state, PSI_mutex *mutex, PSI_mutex_operation op, const char *src_file, uint src_line)
 
void lo_end_mutex_wait (PSI_mutex_locker *locker, int rc)
 
static PSI_rwlock_lockerlo_start_rwlock_rdwait (PSI_rwlock_locker_state *state, PSI_rwlock *rwlock, PSI_rwlock_operation op, const char *src_file, uint src_line)
 
static void lo_end_rwlock_rdwait (PSI_rwlock_locker *locker, int rc)
 
static PSI_rwlock_lockerlo_start_rwlock_wrwait (PSI_rwlock_locker_state *state, PSI_rwlock *rwlock, PSI_rwlock_operation op, const char *src_file, uint src_line)
 
static void lo_end_rwlock_wrwait (PSI_rwlock_locker *locker, int rc)
 
static PSI_cond_lockerlo_start_cond_wait (PSI_cond_locker_state *state, PSI_cond *cond, PSI_mutex *mutex, PSI_cond_operation op, const char *src_file, uint src_line)
 
static void lo_end_cond_wait (PSI_cond_locker *locker, int rc)
 
static PSI_statement_lockerlo_get_thread_statement_locker_v2 (PSI_statement_locker_state *state, PSI_statement_key key, const void *cs, PSI_sp_share *sp_share)
 
static PSI_statement_lockerlo_refine_statement_v2 (PSI_statement_locker *locker, PSI_statement_key key)
 
static void lo_start_statement_v2 (PSI_statement_locker *locker, const char *db, uint db_len, const char *src_file, uint src_line)
 
static void lo_set_statement_text_v2 (PSI_statement_locker *locker, const char *text, uint text_len)
 
static void lo_set_statement_query_id_v2 (PSI_statement_locker *locker, ulonglong query_id)
 
static void lo_set_statement_lock_time_v2 (PSI_statement_locker *locker, ulonglong count)
 
static void lo_set_statement_rows_sent_v2 (PSI_statement_locker *locker, ulonglong count)
 
static void lo_set_statement_rows_examined_v2 (PSI_statement_locker *locker, ulonglong count)
 
static void lo_inc_statement_created_tmp_disk_tables_v2 (PSI_statement_locker *locker, ulong count)
 
static void lo_inc_statement_created_tmp_tables_v2 (PSI_statement_locker *locker, ulong count)
 
static void lo_inc_statement_select_full_join_v2 (PSI_statement_locker *locker, ulong count)
 
static void lo_inc_statement_select_full_range_join_v2 (PSI_statement_locker *locker, ulong count)
 
static void lo_inc_statement_select_range_v2 (PSI_statement_locker *locker, ulong count)
 
static void lo_inc_statement_select_range_check_v2 (PSI_statement_locker *locker, ulong count)
 
static void lo_inc_statement_select_scan_v2 (PSI_statement_locker *locker, ulong count)
 
static void lo_inc_statement_sort_merge_passes_v2 (PSI_statement_locker *locker, ulong count)
 
static void lo_inc_statement_sort_range_v2 (PSI_statement_locker *locker, ulong count)
 
static void lo_inc_statement_sort_rows_v2 (PSI_statement_locker *locker, ulong count)
 
static void lo_inc_statement_sort_scan_v2 (PSI_statement_locker *locker, ulong count)
 
static void lo_set_statement_no_index_used_v2 (PSI_statement_locker *locker)
 
static void lo_set_statement_no_good_index_used_v2 (PSI_statement_locker *locker)
 
static void lo_end_statement_v2 (PSI_statement_locker *locker, void *stmt_da)
 
PSI_prepared_stmtlo_create_prepared_stmt_v2 (void *identity, uint stmt_id, PSI_statement_locker *locker, const char *stmt_name, size_t stmt_name_length, const char *sql_text, size_t sql_text_length)
 
void lo_destroy_prepared_stmt_v2 (PSI_prepared_stmt *prepared_stmt)
 
void lo_reprepare_prepared_stmt_v2 (PSI_prepared_stmt *prepared_stmt)
 
void lo_execute_prepared_stmt_v2 (PSI_statement_locker *locker, PSI_prepared_stmt *ps)
 
void lo_set_prepared_stmt_text_v2 (PSI_prepared_stmt *prepared_stmt, const char *text, uint text_len)
 
PSI_sp_sharelo_get_sp_share_v2 (uint sp_type, const char *schema_name, uint schema_name_length, const char *object_name, uint object_name_length)
 
void lo_release_sp_share_v2 (PSI_sp_share *s)
 
PSI_sp_lockerlo_start_sp_v2 (PSI_sp_locker_state *state, PSI_sp_share *sp_share)
 
void lo_end_sp_v2 (PSI_sp_locker *locker)
 
void lo_drop_sp_v2 (uint sp_type, const char *schema_name, uint schema_name_length, const char *object_name, uint object_name_length)
 
static void lo_start_file_open_wait (PSI_file_locker *locker, const char *src_file, uint src_line)
 
static PSI_filelo_end_file_open_wait (PSI_file_locker *locker, void *result)
 
static void lo_end_file_open_wait_and_bind_to_descriptor (PSI_file_locker *locker, File file)
 
static void lo_end_temp_file_open_wait_and_bind_to_descriptor (PSI_file_locker *locker, File file, const char *filename)
 
static void lo_start_file_wait (PSI_file_locker *locker, size_t count, const char *src_file, uint src_line)
 
static void lo_end_file_wait (PSI_file_locker *locker, size_t count)
 
static void lo_start_file_close_wait (PSI_file_locker *locker, const char *src_file, uint src_line)
 
static void lo_end_file_close_wait (PSI_file_locker *locker, int rc)
 
static void lo_start_file_rename_wait (PSI_file_locker *locker, size_t count, const char *old_name, const char *new_name, const char *src_file, uint src_line)
 
static void lo_end_file_rename_wait (PSI_file_locker *locker, const char *old_name, const char *new_name, int rc)
 
static PSI_digest_lockerlo_digest_start_v2 (PSI_statement_locker *locker)
 
static void lo_digest_end_v2 (PSI_digest_locker *locker, const sql_digest_storage *digest)
 
static int lo_set_thread_connect_attrs (const char *a, uint b, const void *c)
 
static void lo_get_current_thread_event_id (ulonglong *thread_internal_id, ulonglong *event_id)
 
static void lo_get_thread_event_id (PSI_thread *psi, ulonglong *thread_internal_id, ulonglong *event_id)
 
static int lo_get_thread_system_attrs (PSI_thread_attrs *thread_attrs)
 
static int lo_get_thread_system_attrs_by_id (PSI_thread *thread, ulonglong thread_id, PSI_thread_attrs *thread_attrs)
 
static int lo_register_notification (const PSI_notification *callbacks, bool with_ref_count)
 
static int lo_unregister_notification (int handle)
 
static void lo_notify_session_connect (PSI_thread *thread)
 
static void lo_notify_session_disconnect (PSI_thread *thread)
 
static void lo_notify_session_change_user (PSI_thread *thread)
 
static void * lo_get_thread_interface (int version)
 
static void * lo_get_mutex_interface (int version)
 
static void * lo_get_rwlock_interface (int version)
 
static void * lo_get_cond_interface (int version)
 
static void * lo_get_file_interface (int version)
 
static void * lo_get_idle_interface (int version)
 
static void * lo_get_statement_interface (int version)
 
int LO_load_graph (LO_graph *g)
 
int LO_init (LO_global_param *param, PSI_thread_bootstrap **thread_bootstrap, PSI_mutex_bootstrap **mutex_bootstrap, PSI_rwlock_bootstrap **rwlock_bootstrap, PSI_cond_bootstrap **cond_bootstrap, PSI_file_bootstrap **file_bootstrap, PSI_socket_bootstrap **, PSI_table_bootstrap **, PSI_mdl_bootstrap **, PSI_idle_bootstrap **idle_bootstrap, PSI_stage_bootstrap **, PSI_statement_bootstrap **statement_bootstrap, PSI_transaction_bootstrap **, PSI_memory_bootstrap **)
 
int LO_load_dependencies (LO_graph *g, const char *filename)
 
void LO_add_authorised_arc (LO_graph *g, const LO_authorised_arc *arc)
 
void LO_add_node_properties (LO_graph *g, const LO_node_properties *prop)
 
void LO_activate ()
 
void LO_dump ()
 
void LO_cleanup ()
 
PSI_threadLO_get_chain_thread (PSI_thread *thread)
 

Variables

static bool g_internal_debug = false
 
static bool g_with_rwlock = true
 
FILE * out_log = nullptr
 
FILE * out_txt = nullptr
 
native_mutex_t serialize
 
native_mutex_t serialize_logs
 
bool check_activated = false
 
static int debugger_calls = 0
 
static uint sanity_mutex_lock_limit = 100
 
LO_graphglobal_graph = nullptr
 
thread_local LO_threadTHR_LO
 
PSI_mutex_service_tg_mutex_chain = nullptr
 
PSI_rwlock_service_tg_rwlock_chain = nullptr
 
PSI_cond_service_tg_cond_chain = nullptr
 
PSI_thread_service_tg_thread_chain = nullptr
 
PSI_file_service_tg_file_chain = nullptr
 
PSI_idle_service_tg_idle_chain = nullptr
 
PSI_statement_service_tg_statement_chain = nullptr
 
static std::vector< LO_file * > lo_file_array
 Bindings of LO_file objects to file descriptors numbers. More...
 
PSI_thread_service_v3 LO_thread_v3
 
struct PSI_thread_bootstrap LO_thread_bootstrap = {lo_get_thread_interface}
 
PSI_mutex_service_v1 LO_mutex
 
struct PSI_mutex_bootstrap LO_mutex_bootstrap = {lo_get_mutex_interface}
 
PSI_rwlock_service_v2 LO_rwlock
 
struct PSI_rwlock_bootstrap LO_rwlock_bootstrap = {lo_get_rwlock_interface}
 
PSI_cond_service_v1 LO_cond
 
struct PSI_cond_bootstrap LO_cond_bootstrap = {lo_get_cond_interface}
 
PSI_file_service_v2 LO_file
 
struct PSI_file_bootstrap LO_file_bootstrap = {lo_get_file_interface}
 
PSI_idle_service_v1 LO_idle = {lo_start_idle_wait, lo_end_idle_wait}
 
struct PSI_idle_bootstrap LO_idle_bootstrap = {lo_get_idle_interface}
 
PSI_statement_service_v2 LO_statement_v2
 
struct PSI_statement_bootstrap LO_statement_bootstrap
 
LO_global_param lo_param
 

Macro Definition Documentation

◆ LO_COND_RANGE

#define LO_COND_RANGE   3000

◆ LO_FILE_RANGE

#define LO_FILE_RANGE   4000

◆ LO_MAX_COND_CLASS

#define LO_MAX_COND_CLASS   100

◆ LO_MAX_FILE_CLASS

#define LO_MAX_FILE_CLASS   100

◆ LO_MAX_MUTEX_CLASS

#define LO_MAX_MUTEX_CLASS   300

◆ LO_MAX_NODE_NUMBER

#define LO_MAX_NODE_NUMBER
Value:
LO_MAX_FILE_CLASS)
#define LO_MAX_COND_CLASS
Definition: debug_lock_order.cc:1693
#define LO_MAX_RWLOCK_CLASS
Definition: debug_lock_order.cc:1692
#define LO_MAX_MUTEX_CLASS
Definition: debug_lock_order.cc:1691

◆ LO_MAX_QNAME_LENGTH

#define LO_MAX_QNAME_LENGTH   128

◆ LO_MAX_RWLOCK_CLASS

#define LO_MAX_RWLOCK_CLASS   100

◆ LO_MAX_THREAD_CLASS

#define LO_MAX_THREAD_CLASS   100

◆ LO_MUTEX_RANGE

#define LO_MUTEX_RANGE   1000

◆ LO_RWLOCK_RANGE

#define LO_RWLOCK_RANGE   2000

◆ LO_THREAD_RANGE

#define LO_THREAD_RANGE   0

◆ OPERATION_NAME_LENGTH

#define OPERATION_NAME_LENGTH   80

Buffer size to safely print " RECURSIVE OP <operation>".

◆ safe_snprintf

#define safe_snprintf (   B,
  S,
  F,
  ... 
)
Value:
{ \
snprintf(B, S, F, __VA_ARGS__); \
B[S - 1] = '\0'; \
}

◆ STATE_NAME_LENGTH

#define STATE_NAME_LENGTH   80

Buffer size to safely print " STATE <state>".

Typedef Documentation

◆ LO_arc_list

◆ LO_authorised_arc_list

◆ LO_mutex_lock_list

◆ LO_node_list

◆ LO_rwlock_lock_list

◆ LO_thread_list

Enumeration Type Documentation

◆ LO_node_type

Enumerator
NODE_TYPE_MUTEX 
NODE_TYPE_RWLOCK 
NODE_TYPE_COND 
NODE_TYPE_FILE 

Function Documentation

◆ debug_lock_order_break_here()

static void debug_lock_order_break_here ( const char *  why)
static

◆ deep_copy_arc()

static LO_authorised_arc * deep_copy_arc ( const LO_authorised_arc src)
static

◆ deep_copy_string()

static char * deep_copy_string ( const char *  src)
static

◆ destroy_arc()

static void destroy_arc ( LO_authorised_arc arc)
static

◆ destroy_string()

static void destroy_string ( char *  src)
static

◆ get_THR_LO()

static LO_thread* get_THR_LO ( )
inlinestatic

◆ LO_activate()

void LO_activate ( )

◆ LO_add_authorised_arc()

void LO_add_authorised_arc ( LO_graph g,
const LO_authorised_arc arc 
)

◆ LO_add_node_properties()

void LO_add_node_properties ( LO_graph g,
const LO_node_properties prop 
)

◆ lo_aggregate_thread_status()

static void lo_aggregate_thread_status ( PSI_thread thread)
static

◆ lo_broadcast_cond()

static void lo_broadcast_cond ( PSI_cond cond)
static

◆ LO_cleanup()

void LO_cleanup ( )

◆ lo_create_file()

static void lo_create_file ( PSI_file_key  key,
const char *  name,
File  file 
)
static

◆ lo_create_prepared_stmt_v2()

PSI_prepared_stmt* lo_create_prepared_stmt_v2 ( void *  identity,
uint  stmt_id,
PSI_statement_locker locker,
const char *  stmt_name,
size_t  stmt_name_length,
const char *  sql_text,
size_t  sql_text_length 
)

◆ lo_delete_current_thread()

static void lo_delete_current_thread ( void  )
static

◆ lo_delete_thread()

static void lo_delete_thread ( PSI_thread thread)
static

◆ lo_destroy_cond()

static void lo_destroy_cond ( PSI_cond cond)
static

◆ lo_destroy_mutex()

static void lo_destroy_mutex ( PSI_mutex mutex)
static

◆ lo_destroy_prepared_stmt_v2()

void lo_destroy_prepared_stmt_v2 ( PSI_prepared_stmt prepared_stmt)

◆ lo_destroy_rwlock()

static void lo_destroy_rwlock ( PSI_rwlock rwlock)
static

◆ lo_digest_end_v2()

static void lo_digest_end_v2 ( PSI_digest_locker locker,
const sql_digest_storage digest 
)
static

◆ lo_digest_start_v2()

static PSI_digest_locker* lo_digest_start_v2 ( PSI_statement_locker locker)
static

◆ lo_drop_sp_v2()

void lo_drop_sp_v2 ( uint  sp_type,
const char *  schema_name,
uint  schema_name_length,
const char *  object_name,
uint  object_name_length 
)

◆ LO_dump()

void LO_dump ( )

◆ lo_end_cond_wait()

static void lo_end_cond_wait ( PSI_cond_locker locker,
int  rc 
)
static

◆ lo_end_file_close_wait()

static void lo_end_file_close_wait ( PSI_file_locker locker,
int  rc 
)
static

◆ lo_end_file_open_wait()

static PSI_file* lo_end_file_open_wait ( PSI_file_locker locker,
void *  result 
)
static

◆ lo_end_file_open_wait_and_bind_to_descriptor()

static void lo_end_file_open_wait_and_bind_to_descriptor ( PSI_file_locker locker,
File  file 
)
static

◆ lo_end_file_rename_wait()

static void lo_end_file_rename_wait ( PSI_file_locker locker,
const char *  old_name,
const char *  new_name,
int  rc 
)
static

◆ lo_end_file_wait()

static void lo_end_file_wait ( PSI_file_locker locker,
size_t  count 
)
static

◆ lo_end_idle_wait()

static void lo_end_idle_wait ( PSI_idle_locker locker)
static

◆ lo_end_mutex_wait()

void lo_end_mutex_wait ( PSI_mutex_locker locker,
int  rc 
)

◆ lo_end_rwlock_rdwait()

static void lo_end_rwlock_rdwait ( PSI_rwlock_locker locker,
int  rc 
)
static

◆ lo_end_rwlock_wrwait()

static void lo_end_rwlock_wrwait ( PSI_rwlock_locker locker,
int  rc 
)
static

◆ lo_end_sp_v2()

void lo_end_sp_v2 ( PSI_sp_locker locker)

◆ lo_end_statement_v2()

static void lo_end_statement_v2 ( PSI_statement_locker locker,
void *  stmt_da 
)
static

◆ lo_end_temp_file_open_wait_and_bind_to_descriptor()

static void lo_end_temp_file_open_wait_and_bind_to_descriptor ( PSI_file_locker locker,
File  file,
const char *  filename 
)
static

◆ lo_execute_prepared_stmt_v2()

void lo_execute_prepared_stmt_v2 ( PSI_statement_locker locker,
PSI_prepared_stmt ps 
)

◆ lo_file_bindings_find()

static LO_file* lo_file_bindings_find ( size_t  index,
bool  remove 
)
static

◆ lo_file_bindings_insert()

static void lo_file_bindings_insert ( size_t  index,
LO_file lo_file 
)
static

◆ LO_get_chain_thread()

PSI_thread* LO_get_chain_thread ( PSI_thread thread)

◆ lo_get_cond_interface()

static void* lo_get_cond_interface ( int  version)
static

◆ lo_get_current_thread_event_id()

static void lo_get_current_thread_event_id ( ulonglong thread_internal_id,
ulonglong event_id 
)
static

◆ lo_get_current_thread_internal_id()

static ulonglong lo_get_current_thread_internal_id ( )
static

◆ lo_get_file_interface()

static void* lo_get_file_interface ( int  version)
static

◆ lo_get_idle_interface()

static void* lo_get_idle_interface ( int  version)
static

◆ lo_get_mutex_interface()

static void* lo_get_mutex_interface ( int  version)
static

◆ lo_get_rwlock_interface()

static void* lo_get_rwlock_interface ( int  version)
static

◆ lo_get_sp_share_v2()

PSI_sp_share* lo_get_sp_share_v2 ( uint  sp_type,
const char *  schema_name,
uint  schema_name_length,
const char *  object_name,
uint  object_name_length 
)

◆ lo_get_statement_interface()

static void* lo_get_statement_interface ( int  version)
static

◆ lo_get_thread()

static PSI_thread* lo_get_thread ( void  )
static

◆ lo_get_thread_by_id()

static PSI_thread* lo_get_thread_by_id ( ulonglong  processlist_id)
static

◆ lo_get_thread_event_id()

static void lo_get_thread_event_id ( PSI_thread psi,
ulonglong thread_internal_id,
ulonglong event_id 
)
static

◆ lo_get_thread_file_descriptor_locker()

static PSI_file_locker* lo_get_thread_file_descriptor_locker ( PSI_file_locker_state state,
File  file,
PSI_file_operation  op 
)
static

◆ lo_get_thread_file_name_locker()

static PSI_file_locker* lo_get_thread_file_name_locker ( PSI_file_locker_state state,
PSI_file_key  key,
PSI_file_operation  op,
const char *  name,
const void *  identity 
)
static

◆ lo_get_thread_file_stream_locker()

static PSI_file_locker* lo_get_thread_file_stream_locker ( PSI_file_locker_state state,
PSI_file file,
PSI_file_operation  op 
)
static

◆ lo_get_thread_interface()

static void* lo_get_thread_interface ( int  version)
static

◆ lo_get_thread_internal_id()

static ulonglong lo_get_thread_internal_id ( PSI_thread thread)
static

◆ lo_get_thread_statement_locker_v2()

static PSI_statement_locker* lo_get_thread_statement_locker_v2 ( PSI_statement_locker_state state,
PSI_statement_key  key,
const void *  cs,
PSI_sp_share sp_share 
)
static

◆ lo_get_thread_system_attrs()

static int lo_get_thread_system_attrs ( PSI_thread_attrs thread_attrs)
static

◆ lo_get_thread_system_attrs_by_id()

static int lo_get_thread_system_attrs_by_id ( PSI_thread thread,
ulonglong  thread_id,
PSI_thread_attrs thread_attrs 
)
static

◆ lo_inc_statement_created_tmp_disk_tables_v2()

static void lo_inc_statement_created_tmp_disk_tables_v2 ( PSI_statement_locker locker,
ulong  count 
)
static

◆ lo_inc_statement_created_tmp_tables_v2()

static void lo_inc_statement_created_tmp_tables_v2 ( PSI_statement_locker locker,
ulong  count 
)
static

◆ lo_inc_statement_select_full_join_v2()

static void lo_inc_statement_select_full_join_v2 ( PSI_statement_locker locker,
ulong  count 
)
static

◆ lo_inc_statement_select_full_range_join_v2()

static void lo_inc_statement_select_full_range_join_v2 ( PSI_statement_locker locker,
ulong  count 
)
static

◆ lo_inc_statement_select_range_check_v2()

static void lo_inc_statement_select_range_check_v2 ( PSI_statement_locker locker,
ulong  count 
)
static

◆ lo_inc_statement_select_range_v2()

static void lo_inc_statement_select_range_v2 ( PSI_statement_locker locker,
ulong  count 
)
static

◆ lo_inc_statement_select_scan_v2()

static void lo_inc_statement_select_scan_v2 ( PSI_statement_locker locker,
ulong  count 
)
static

◆ lo_inc_statement_sort_merge_passes_v2()

static void lo_inc_statement_sort_merge_passes_v2 ( PSI_statement_locker locker,
ulong  count 
)
static

◆ lo_inc_statement_sort_range_v2()

static void lo_inc_statement_sort_range_v2 ( PSI_statement_locker locker,
ulong  count 
)
static

◆ lo_inc_statement_sort_rows_v2()

static void lo_inc_statement_sort_rows_v2 ( PSI_statement_locker locker,
ulong  count 
)
static

◆ lo_inc_statement_sort_scan_v2()

static void lo_inc_statement_sort_scan_v2 ( PSI_statement_locker locker,
ulong  count 
)
static

◆ LO_init()

int LO_init ( LO_global_param param,
PSI_thread_bootstrap **  thread_bootstrap,
PSI_mutex_bootstrap **  mutex_bootstrap,
PSI_rwlock_bootstrap **  rwlock_bootstrap,
PSI_cond_bootstrap **  cond_bootstrap,
PSI_file_bootstrap **  file_bootstrap,
PSI_socket_bootstrap **  ,
PSI_table_bootstrap **  ,
PSI_mdl_bootstrap **  ,
PSI_idle_bootstrap **  idle_bootstrap,
PSI_stage_bootstrap **  ,
PSI_statement_bootstrap **  statement_bootstrap,
PSI_transaction_bootstrap **  ,
PSI_memory_bootstrap **   
)

◆ lo_init_cond()

static PSI_cond* lo_init_cond ( PSI_cond_key  key,
const void *  identity 
)
static

◆ lo_init_mutex()

static PSI_mutex* lo_init_mutex ( PSI_mutex_key  key,
const void *  identity 
)
static

◆ lo_init_rwlock()

static PSI_rwlock* lo_init_rwlock ( PSI_rwlock_key  key,
const void *  identity 
)
static

◆ LO_load_dependencies()

int LO_load_dependencies ( LO_graph g,
const char *  filename 
)

◆ LO_load_graph()

int LO_load_graph ( LO_graph g)

◆ lo_new_thread()

static PSI_thread* lo_new_thread ( PSI_thread_key  key,
const void *  identity,
ulonglong  processlist_id 
)
static

◆ lo_notify_session_change_user()

static void lo_notify_session_change_user ( PSI_thread thread)
static

◆ lo_notify_session_connect()

static void lo_notify_session_connect ( PSI_thread thread)
static

◆ lo_notify_session_disconnect()

static void lo_notify_session_disconnect ( PSI_thread thread)
static

◆ lo_refine_statement_v2()

static PSI_statement_locker* lo_refine_statement_v2 ( PSI_statement_locker locker,
PSI_statement_key  key 
)
static

◆ lo_register_cond()

static void lo_register_cond ( const char *  category,
PSI_cond_info info,
int  count 
)
static

◆ lo_register_file()

static void lo_register_file ( const char *  category,
PSI_file_info info,
int  count 
)
static

◆ lo_register_mutex()

static void lo_register_mutex ( const char *  category,
PSI_mutex_info info,
int  count 
)
static

◆ lo_register_notification()

static int lo_register_notification ( const PSI_notification callbacks,
bool  with_ref_count 
)
static

◆ lo_register_rwlock()

static void lo_register_rwlock ( const char *  category,
PSI_rwlock_info info,
int  count 
)
static

◆ lo_register_statement_v2()

static void lo_register_statement_v2 ( const char *  category,
PSI_statement_info info,
int  count 
)
static

◆ lo_register_thread()

static void lo_register_thread ( const char *  category,
PSI_thread_info info,
int  count 
)
static

◆ lo_release_sp_share_v2()

void lo_release_sp_share_v2 ( PSI_sp_share s)

◆ lo_reprepare_prepared_stmt_v2()

void lo_reprepare_prepared_stmt_v2 ( PSI_prepared_stmt prepared_stmt)

◆ lo_set_connection_type()

static void lo_set_connection_type ( opaque_vio_type  conn_type)
static

◆ lo_set_prepared_stmt_text_v2()

void lo_set_prepared_stmt_text_v2 ( PSI_prepared_stmt prepared_stmt,
const char *  text,
uint  text_len 
)

◆ lo_set_statement_lock_time_v2()

static void lo_set_statement_lock_time_v2 ( PSI_statement_locker locker,
ulonglong  count 
)
static

◆ lo_set_statement_no_good_index_used_v2()

static void lo_set_statement_no_good_index_used_v2 ( PSI_statement_locker locker)
static

◆ lo_set_statement_no_index_used_v2()

static void lo_set_statement_no_index_used_v2 ( PSI_statement_locker locker)
static

◆ lo_set_statement_query_id_v2()

static void lo_set_statement_query_id_v2 ( PSI_statement_locker locker,
ulonglong  query_id 
)
static

◆ lo_set_statement_rows_examined_v2()

static void lo_set_statement_rows_examined_v2 ( PSI_statement_locker locker,
ulonglong  count 
)
static

◆ lo_set_statement_rows_sent_v2()

static void lo_set_statement_rows_sent_v2 ( PSI_statement_locker locker,
ulonglong  count 
)
static

◆ lo_set_statement_text_v2()

static void lo_set_statement_text_v2 ( PSI_statement_locker locker,
const char *  text,
uint  text_len 
)
static

◆ lo_set_thread()

static void lo_set_thread ( PSI_thread thread)
static

◆ lo_set_thread_account()

static void lo_set_thread_account ( const char *  user,
int  user_len,
const char *  host,
int  host_len 
)
static

◆ lo_set_thread_command()

static void lo_set_thread_command ( int  command)
static

◆ lo_set_thread_connect_attrs()

static int lo_set_thread_connect_attrs ( const char *  a,
uint  b,
const void *  c 
)
static

◆ lo_set_thread_db()

static void lo_set_thread_db ( const char *  db,
int  db_len 
)
static

◆ lo_set_thread_id()

static void lo_set_thread_id ( PSI_thread thread,
ulonglong  id 
)
static

◆ lo_set_thread_info()

static void lo_set_thread_info ( const char *  info,
uint  info_len 
)
static

◆ lo_set_thread_os_id()

static void lo_set_thread_os_id ( PSI_thread thread)
static

◆ lo_set_thread_resource_group()

static int lo_set_thread_resource_group ( const char *  group_name,
int  group_name_len,
void *  user_data 
)
static

◆ lo_set_thread_resource_group_by_id()

static int lo_set_thread_resource_group_by_id ( PSI_thread thread,
ulonglong  thread_id,
const char *  group_name,
int  group_name_len,
void *  user_data 
)
static

◆ lo_set_thread_start_time()

static void lo_set_thread_start_time ( time_t  start_time)
static

◆ lo_set_thread_THD()

static void lo_set_thread_THD ( PSI_thread thread,
THD thd 
)
static

◆ lo_set_thread_user()

static void lo_set_thread_user ( const char *  user,
int  user_len 
)
static

◆ lo_signal_cond()

static void lo_signal_cond ( PSI_cond cond)
static

◆ lo_spawn_thread()

static int lo_spawn_thread ( PSI_thread_key  key,
my_thread_handle thread,
const my_thread_attr_t attr,
void *(*)(void *)  start_routine,
void *  arg 
)
static

◆ lo_spawn_thread_fct()

void* lo_spawn_thread_fct ( void *  arg)

◆ lo_start_cond_wait()

static PSI_cond_locker* lo_start_cond_wait ( PSI_cond_locker_state state,
PSI_cond cond,
PSI_mutex mutex,
PSI_cond_operation  op,
const char *  src_file,
uint  src_line 
)
static

◆ lo_start_file_close_wait()

static void lo_start_file_close_wait ( PSI_file_locker locker,
const char *  src_file,
uint  src_line 
)
static

◆ lo_start_file_open_wait()

static void lo_start_file_open_wait ( PSI_file_locker locker,
const char *  src_file,
uint  src_line 
)
static

◆ lo_start_file_rename_wait()

static void lo_start_file_rename_wait ( PSI_file_locker locker,
size_t  count,
const char *  old_name,
const char *  new_name,
const char *  src_file,
uint  src_line 
)
static

◆ lo_start_file_wait()

static void lo_start_file_wait ( PSI_file_locker locker,
size_t  count,
const char *  src_file,
uint  src_line 
)
static

◆ lo_start_idle_wait()

static PSI_idle_locker* lo_start_idle_wait ( PSI_idle_locker_state state,
const char *  src_file,
uint  src_line 
)
static

◆ lo_start_mutex_wait()

static PSI_mutex_locker* lo_start_mutex_wait ( PSI_mutex_locker_state state,
PSI_mutex mutex,
PSI_mutex_operation  op,
const char *  src_file,
uint  src_line 
)
static

◆ lo_start_rwlock_rdwait()

static PSI_rwlock_locker* lo_start_rwlock_rdwait ( PSI_rwlock_locker_state state,
PSI_rwlock rwlock,
PSI_rwlock_operation  op,
const char *  src_file,
uint  src_line 
)
static

◆ lo_start_rwlock_wrwait()

static PSI_rwlock_locker* lo_start_rwlock_wrwait ( PSI_rwlock_locker_state state,
PSI_rwlock rwlock,
PSI_rwlock_operation  op,
const char *  src_file,
uint  src_line 
)
static

◆ lo_start_sp_v2()

PSI_sp_locker* lo_start_sp_v2 ( PSI_sp_locker_state state,
PSI_sp_share sp_share 
)

◆ lo_start_statement_v2()

static void lo_start_statement_v2 ( PSI_statement_locker locker,
const char *  db,
uint  db_len,
const char *  src_file,
uint  src_line 
)
static

◆ lo_unlock_mutex()

static void lo_unlock_mutex ( PSI_mutex mutex)
static

◆ lo_unlock_rwlock()

static void lo_unlock_rwlock ( PSI_rwlock rwlock,
PSI_rwlock_operation  op 
)
static

◆ lo_unregister_notification()

static int lo_unregister_notification ( int  handle)
static

◆ LOCK_ORDER_parse()

int LOCK_ORDER_parse ( struct LO_parser_param param)

◆ print_file()

static void print_file ( FILE *  file,
const char *  format,
  ... 
)
static

◆ set_THR_LO()

static void set_THR_LO ( LO_thread lo)
inlinestatic

Variable Documentation

◆ check_activated

bool check_activated = false

◆ debugger_calls

int debugger_calls = 0
static

◆ g_cond_chain

PSI_cond_service_t* g_cond_chain = nullptr

◆ g_file_chain

PSI_file_service_t* g_file_chain = nullptr

◆ g_idle_chain

PSI_idle_service_t* g_idle_chain = nullptr

◆ g_internal_debug

bool g_internal_debug = false
static

◆ g_mutex_chain

PSI_mutex_service_t* g_mutex_chain = nullptr

◆ g_rwlock_chain

PSI_rwlock_service_t* g_rwlock_chain = nullptr

◆ g_statement_chain

PSI_statement_service_t* g_statement_chain = nullptr

◆ g_thread_chain

PSI_thread_service_t* g_thread_chain = nullptr

◆ g_with_rwlock

bool g_with_rwlock = true
static

◆ global_graph

LO_graph* global_graph = nullptr

◆ LO_cond

Initial value:
= {
static void lo_register_cond(const char *category, PSI_cond_info *info, int count)
Definition: debug_lock_order.cc:6070
static void lo_broadcast_cond(PSI_cond *cond)
Definition: debug_lock_order.cc:6834
static void lo_end_cond_wait(PSI_cond_locker *locker, int rc)
Definition: debug_lock_order.cc:7031
static PSI_cond * lo_init_cond(PSI_cond_key key, const void *identity)
Definition: debug_lock_order.cc:6231
static void lo_signal_cond(PSI_cond *cond)
Definition: debug_lock_order.cc:6818
static PSI_cond_locker * lo_start_cond_wait(PSI_cond_locker_state *state, PSI_cond *cond, PSI_mutex *mutex, PSI_cond_operation op, const char *src_file, uint src_line)
Definition: debug_lock_order.cc:6997
static void lo_destroy_cond(PSI_cond *cond)
Definition: debug_lock_order.cc:6258

◆ LO_cond_bootstrap

struct PSI_cond_bootstrap LO_cond_bootstrap = {lo_get_cond_interface}

◆ LO_file

Initial value:
= {
static void lo_end_file_close_wait(PSI_file_locker *locker, int rc)
Definition: debug_lock_order.cc:7432
static void lo_start_file_open_wait(PSI_file_locker *locker, const char *src_file, uint src_line)
Definition: debug_lock_order.cc:7308
static PSI_file_locker * lo_get_thread_file_stream_locker(PSI_file_locker_state *state, PSI_file *file, PSI_file_operation op)
Definition: debug_lock_order.cc:6701
static void lo_end_temp_file_open_wait_and_bind_to_descriptor(PSI_file_locker *locker, File file, const char *filename)
Definition: debug_lock_order.cc:7378
static void lo_start_file_rename_wait(PSI_file_locker *locker, size_t count, const char *old_name, const char *new_name, const char *src_file, uint src_line)
Definition: debug_lock_order.cc:7450
static void lo_end_file_wait(PSI_file_locker *locker, size_t count)
Definition: debug_lock_order.cc:7409
static void lo_register_file(const char *category, PSI_file_info *info, int count)
Definition: debug_lock_order.cc:6117
static PSI_file_locker * lo_get_thread_file_descriptor_locker(PSI_file_locker_state *state, File file, PSI_file_operation op)
Definition: debug_lock_order.cc:6731
static PSI_file_locker * lo_get_thread_file_name_locker(PSI_file_locker_state *state, PSI_file_key key, PSI_file_operation op, const char *name, const void *identity)
Definition: debug_lock_order.cc:6660
static void lo_start_file_close_wait(PSI_file_locker *locker, const char *src_file, uint src_line)
Definition: debug_lock_order.cc:7421
static void lo_start_file_wait(PSI_file_locker *locker, size_t count, const char *src_file, uint src_line)
Definition: debug_lock_order.cc:7398
static void lo_end_file_open_wait_and_bind_to_descriptor(PSI_file_locker *locker, File file)
Definition: debug_lock_order.cc:7359
static PSI_file * lo_end_file_open_wait(PSI_file_locker *locker, void *result)
Definition: debug_lock_order.cc:7319
static void lo_create_file(PSI_file_key key, const char *name, File file)
Definition: debug_lock_order.cc:6310
static void lo_end_file_rename_wait(PSI_file_locker *locker, const char *old_name, const char *new_name, int rc)
Definition: debug_lock_order.cc:7465

◆ lo_file_array

std::vector<LO_file *> lo_file_array
static

Bindings of LO_file objects to file descriptors numbers.

◆ LO_file_bootstrap

struct PSI_file_bootstrap LO_file_bootstrap = {lo_get_file_interface}

◆ LO_idle

◆ LO_idle_bootstrap

struct PSI_idle_bootstrap LO_idle_bootstrap = {lo_get_idle_interface}

◆ LO_mutex

Initial value:
void lo_end_mutex_wait(PSI_mutex_locker *locker, int rc)
Definition: debug_lock_order.cc:6896
static void lo_unlock_mutex(PSI_mutex *mutex)
Definition: debug_lock_order.cc:6782
static PSI_mutex_locker * lo_start_mutex_wait(PSI_mutex_locker_state *state, PSI_mutex *mutex, PSI_mutex_operation op, const char *src_file, uint src_line)
Definition: debug_lock_order.cc:6868
static void lo_destroy_mutex(PSI_mutex *mutex)
Definition: debug_lock_order.cc:6175
static PSI_mutex * lo_init_mutex(PSI_mutex_key key, const void *identity)
Definition: debug_lock_order.cc:6148
static void lo_register_mutex(const char *category, PSI_mutex_info *info, int count)
Definition: debug_lock_order.cc:6022

◆ LO_mutex_bootstrap

struct PSI_mutex_bootstrap LO_mutex_bootstrap = {lo_get_mutex_interface}

◆ lo_param

LO_global_param lo_param

◆ LO_rwlock

Initial value:
= {
}
static void lo_end_rwlock_wrwait(PSI_rwlock_locker *locker, int rc)
Definition: debug_lock_order.cc:6982
static PSI_rwlock * lo_init_rwlock(PSI_rwlock_key key, const void *identity)
Definition: debug_lock_order.cc:6189
static void lo_unlock_rwlock(PSI_rwlock *rwlock, PSI_rwlock_operation op)
Definition: debug_lock_order.cc:6800
static void lo_register_rwlock(const char *category, PSI_rwlock_info *info, int count)
Definition: debug_lock_order.cc:6046
static PSI_rwlock_locker * lo_start_rwlock_wrwait(PSI_rwlock_locker_state *state, PSI_rwlock *rwlock, PSI_rwlock_operation op, const char *src_file, uint src_line)
Definition: debug_lock_order.cc:6955
static void lo_destroy_rwlock(PSI_rwlock *rwlock)
Definition: debug_lock_order.cc:6217
static void lo_end_rwlock_rdwait(PSI_rwlock_locker *locker, int rc)
Definition: debug_lock_order.cc:6940
static PSI_rwlock_locker * lo_start_rwlock_rdwait(PSI_rwlock_locker_state *state, PSI_rwlock *rwlock, PSI_rwlock_operation op, const char *src_file, uint src_line)
Definition: debug_lock_order.cc:6913

◆ LO_rwlock_bootstrap

struct PSI_rwlock_bootstrap LO_rwlock_bootstrap = {lo_get_rwlock_interface}

◆ LO_statement_bootstrap

struct PSI_statement_bootstrap LO_statement_bootstrap
Initial value:
= {
static void * lo_get_statement_interface(int version)
Definition: debug_lock_order.cc:7783

◆ LO_statement_v2

PSI_statement_service_v2 LO_statement_v2

◆ LO_thread_bootstrap

struct PSI_thread_bootstrap LO_thread_bootstrap = {lo_get_thread_interface}

◆ LO_thread_v3

PSI_thread_service_v3 LO_thread_v3

◆ out_log

FILE* out_log = nullptr

◆ out_txt

FILE* out_txt = nullptr

◆ sanity_mutex_lock_limit

uint sanity_mutex_lock_limit = 100
static

◆ serialize

native_mutex_t serialize

◆ serialize_logs

native_mutex_t serialize_logs

◆ THR_LO

thread_local LO_thread* THR_LO