MySQL 5.6.14 Source Code Document
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
sync0sync.h File Reference
#include "univ.i"
#include "sync0types.h"
#include "ut0lst.h"
#include "ut0mem.h"
#include "os0thread.h"
#include "os0sync.h"
#include "sync0arr.h"
#include "sync0sync.ic"
Include dependency graph for sync0sync.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  ib_mutex_t

Macros

#define mutex_create(K, M, level)   mutex_create_func((M), __FILE__, __LINE__)
#define mutex_enter(M)   mutex_enter_func((M), __FILE__, __LINE__)
#define mutex_enter_nowait(M)   mutex_enter_nowait_func((M), __FILE__, __LINE__)
#define mutex_exit(M)   mutex_exit_func(M)
#define mutex_free(M)   mutex_free_func(M)
#define mutex_enter_fast(M)   mutex_enter_func((M), __FILE__, __LINE__)
#define SYNC_USER_TRX_LOCK   9999
#define SYNC_NO_ORDER_CHECK
#define SYNC_LEVEL_VARYING
#define SYNC_TRX_I_S_RWLOCK
#define SYNC_TRX_I_S_LAST_READ
#define SYNC_FILE_FORMAT_TAG
#define SYNC_DICT_OPERATION
#define SYNC_FTS_CACHE   1005 /* FTS cache rwlock */
#define SYNC_DICT   1000
#define SYNC_DICT_AUTOINC_MUTEX   999
#define SYNC_STATS_AUTO_RECALC   997
#define SYNC_DICT_HEADER   995
#define SYNC_IBUF_HEADER   914
#define SYNC_IBUF_PESS_INSERT_MUTEX   912
#define SYNC_INDEX_TREE   900
#define SYNC_TREE_NODE_NEW   892
#define SYNC_TREE_NODE_FROM_HASH   891
#define SYNC_TREE_NODE   890
#define SYNC_PURGE_LATCH   800
#define SYNC_TRX_UNDO   700
#define SYNC_RSEG   600
#define SYNC_RSEG_HEADER_NEW   591
#define SYNC_RSEG_HEADER   590
#define SYNC_TRX_UNDO_PAGE   570
#define SYNC_EXTERN_STORAGE   500
#define SYNC_FSP   400
#define SYNC_FSP_PAGE   395
#define SYNC_IBUF_MUTEX   370 /* ibuf_mutex */
#define SYNC_IBUF_INDEX_TREE   360
#define SYNC_IBUF_TREE_NODE_NEW   359
#define SYNC_IBUF_TREE_NODE   358
#define SYNC_IBUF_BITMAP_MUTEX   351
#define SYNC_IBUF_BITMAP   350
#define SYNC_INDEX_ONLINE_LOG   340
#define SYNC_LOCK_WAIT_SYS   300
#define SYNC_LOCK_SYS   299
#define SYNC_TRX_SYS   298
#define SYNC_TRX   297
#define SYNC_THREADS   295
#define SYNC_REC_LOCK   294
#define SYNC_TRX_SYS_HEADER   290
#define SYNC_PURGE_QUEUE   200
#define SYNC_LOG   170
#define SYNC_LOG_FLUSH_ORDER   147
#define SYNC_RECV   168
#define SYNC_FTS_CACHE_INIT   166 /* Used for FTS cache initialization */
#define SYNC_FTS_BG_THREADS   165
#define SYNC_FTS_OPTIMIZE   164
#define SYNC_WORK_QUEUE   162
#define SYNC_SEARCH_SYS
#define SYNC_BUF_POOL   150 /* Buffer pool mutex */
#define SYNC_BUF_PAGE_HASH   149 /* buf_pool->page_hash rw_lock */
#define SYNC_BUF_BLOCK   146 /* Block mutex */
#define SYNC_BUF_FLUSH_LIST   145 /* Buffer flush list mutex */
#define SYNC_DOUBLEWRITE   140
#define SYNC_ANY_LATCH   135
#define SYNC_MEM_HASH   131
#define SYNC_MEM_POOL   130
#define RW_LOCK_NOT_LOCKED   350
#define RW_LOCK_EX   351
#define RW_LOCK_EXCLUSIVE   351
#define RW_LOCK_SHARED   352
#define RW_LOCK_WAIT_EX   353
#define SYNC_MUTEX   354
#define SYNC_SPIN_ROUNDS   srv_n_spin_wait_rounds

Typedefs

typedef byte lock_word_t

Functions

UNIV_INTERN void sync_init (void)
UNIV_INTERN void sync_close (void)
UNIV_INTERN void mutex_create_func (ib_mutex_t *mutex, const char *cfile_name, ulint cline)
UNIV_INTERN void mutex_free_func (ib_mutex_t *mutex)
UNIV_INLINE void mutex_enter_func (ib_mutex_t *mutex, const char *file_name, ulint line)
UNIV_INTERN ulint mutex_enter_nowait_func (ib_mutex_t *mutex, const char *file_name, ulint line)
UNIV_INLINE void mutex_exit_func (ib_mutex_t *mutex)
UNIV_INTERN void sync_print_wait_info (FILE *file)
UNIV_INTERN void sync_print (FILE *file)
UNIV_INLINE lock_word_t mutex_get_lock_word (const ib_mutex_t *mutex)
typedef UT_LIST_BASE_NODE_T (ib_mutex_t) ut_list_base_node_t
UNIV_INLINE void os_atomic_dec_ulint_func (ib_mutex_t *mutex, volatile ulint *var, ulint delta)
UNIV_INLINE void os_atomic_inc_ulint_func (ib_mutex_t *mutex, volatile ulint *var, ulint delta)

Variables

ib_int64_t mutex_exit_count
ibool sync_initialized
ut_list_base_node_t mutex_list
ib_mutex_t mutex_list_mutex

Detailed Description

Mutex, the basic synchronization primitive

Created 9/5/1995 Heikki Tuuri

Definition in file sync0sync.h.

Macro Definition Documentation

#define mutex_enter_fast (   M)    mutex_enter_func((M), __FILE__, __LINE__)

NOTE! The following macro should be used in mutex locking, not the corresponding function.

Definition at line 258 of file sync0sync.h.

#define SYNC_DICT_OPERATION
Value:
1010 /* table create, drop, etc. reserve
this in X-mode; implicit or backround
operations purge, rollback, foreign
key checks reserve this in S-mode */

Definition at line 655 of file sync0sync.h.

#define SYNC_FILE_FORMAT_TAG
Value:
1200 /* Used to serialize access to the
file format tag */

Definition at line 654 of file sync0sync.h.

#define SYNC_LEVEL_VARYING
Value:
2000 /* Level is varying. Only used with
buffer pool page locks, which do not
have a fixed level, but instead have
their level set after the page is
locked; see e.g.
ibuf_bitmap_get_map_page(). */

Definition at line 651 of file sync0sync.h.

#define SYNC_NO_ORDER_CHECK
Value:
3000 /* this can be used to suppress
latching order checking */

Definition at line 650 of file sync0sync.h.

#define SYNC_SEARCH_SYS
Value:
160 /* NOTE that if we have a memory
heap that can be extended to the
buffer pool, its logical level is
SYNC_SEARCH_SYS, as memory allocation
can call routines there! Otherwise
the level is SYNC_MEM_HASH. */

Definition at line 705 of file sync0sync.h.

#define SYNC_SPIN_ROUNDS   srv_n_spin_wait_rounds
Constant determining how long spin wait is continued before suspending

the thread. A value 600 rounds on a 1995 100 MHz Pentium seems to correspond to 20 microseconds.

Definition at line 774 of file sync0sync.h.

#define SYNC_TRX_I_S_LAST_READ
Value:
1900 /* Used for
trx_i_s_cache_t::last_read_mutex */

Definition at line 653 of file sync0sync.h.

#define SYNC_TRX_I_S_RWLOCK
Value:
1910 /* Used for
trx_i_s_cache_t::rw_lock */

Definition at line 652 of file sync0sync.h.

Function Documentation

UNIV_INTERN void mutex_create_func ( ib_mutex_t mutex,
const char *  cfile_name,
ulint  cline 
)

Creates, or rather, initializes a mutex object in a specified memory location (which must be appropriately aligned). The mutex is initialized in the reset state. Explicit freeing of the mutex with mutex_free is necessary only if the memory block containing it is freed. in: file line where created

Creates, or rather, initializes a mutex object in a specified memory location (which must be appropriately aligned). The mutex is initialized in the reset state. Explicit freeing of the mutex with mutex_free is necessary only if the memory block containing it is freed.

Parameters
mutexin: pointer to memory
cfile_namein: file name where created
clinein: file line where created

Definition at line 263 of file sync0sync.cc.

Here is the call graph for this function:

UNIV_INLINE void mutex_enter_func ( ib_mutex_t mutex,
const char *  file_name,
ulint  line 
)

NOTE! Use the corresponding macro in the header file, not this function directly. Locks a mutex for the current thread. If the mutex is reserved the function spins a preset time (controlled by SYNC_SPIN_ROUNDS) waiting for the mutex before suspending the thread. in: line where locked

Parameters
mutexin: pointer to mutex
file_namein: file name where locked
UNIV_INTERN ulint mutex_enter_nowait_func ( ib_mutex_t mutex,
const char *  file_name,
ulint  line 
)

NOTE! Use the corresponding macro in the header file, not this function directly. Tries to lock the mutex for the current thread. If the lock is not acquired immediately, returns with return value 1.

Returns
0 if succeed, 1 if not in: line where requested
Parameters
mutexin: pointer to mutex
file_namein: file name where mutex requested
UNIV_INLINE void mutex_exit_func ( ib_mutex_t mutex)

NOTE! Use the corresponding macro mutex_exit(), not directly this function! Unlocks a mutex owned by the current thread. in: pointer to mutex

UNIV_INTERN void mutex_free_func ( ib_mutex_t mutex)

NOTE! Use the corresponding macro mutex_free(), not directly this function! Calling this function is obligatory only if the memory buffer containing the mutex is freed. Removes a mutex object from the mutex list. The mutex is checked to be in the reset state. in: mutex

NOTE! Use the corresponding macro mutex_free(), not directly this function! Calling this function is obligatory only if the memory buffer containing the mutex is freed. Removes a mutex object from the mutex list. The mutex is checked to be in the reset state.

Parameters
mutexin: mutex

Definition at line 326 of file sync0sync.cc.

Here is the call graph for this function:

UNIV_INLINE lock_word_t mutex_get_lock_word ( const ib_mutex_t mutex)

NOT to be used outside this module except in debugging! Gets the value of the lock word. in: mutex

Here is the caller graph for this function:

UNIV_INLINE void os_atomic_dec_ulint_func ( ib_mutex_t mutex,
volatile ulint *  var,
ulint  delta 
)

Function that uses a mutex to decrement a variable atomically in: delta to decrement

Parameters
mutexin: mutex guarding the decrement
varin/out: variable to decrement
UNIV_INLINE void os_atomic_inc_ulint_func ( ib_mutex_t mutex,
volatile ulint *  var,
ulint  delta 
)

Function that uses a mutex to increment a variable atomically in: delta to increment

Parameters
mutexin: mutex guarding the increment
varin/out: variable to increment
UNIV_INTERN void sync_close ( void  )

Frees the resources in synchronization data structures.

Frees the resources in InnoDB's own synchronization data structures. Use os_sync_free() after calling this.

Definition at line 1516 of file sync0sync.cc.

Here is the call graph for this function:

UNIV_INTERN void sync_init ( void  )

Initializes the synchronization data structures.

Definition at line 1439 of file sync0sync.cc.

Here is the call graph for this function:

Here is the caller graph for this function:

UNIV_INTERN void sync_print ( FILE *  file)

Prints info of the sync system. in: file where to print

Prints info of the sync system.

Parameters
filein: file where to print

Definition at line 1594 of file sync0sync.cc.

Here is the call graph for this function:

Here is the caller graph for this function:

UNIV_INTERN void sync_print_wait_info ( FILE *  file)

Prints wait info of the sync system. in: file where to print

Prints wait info of the sync system.

Parameters
filein: file where to print

Definition at line 1556 of file sync0sync.cc.

Here is the caller graph for this function:

typedef UT_LIST_BASE_NODE_T ( ib_mutex_t  )

Global list of database mutexes (not OS mutexes) created.

Variable Documentation

ib_int64_t mutex_exit_count

The number of mutex_exit calls. Intended for performance monitoring.

The number of mutex_exit() calls. Intended for performance

monitoring.

Definition at line 183 of file sync0sync.cc.

ut_list_base_node_t mutex_list

Global list of database mutexes (not OS mutexes) created.

Definition at line 208 of file sync0sync.cc.

ib_mutex_t mutex_list_mutex

Mutex protecting the mutex_list variable

Definition at line 211 of file sync0sync.cc.

ibool sync_initialized

This variable is set to TRUE when sync_init is called

Definition at line 186 of file sync0sync.cc.