![]() |
MySQL
8.0.23
Source Code Documentation
|
#include "univ.i"
#include "os0event.h"
#include "ut0counter.h"
#include <atomic>
#include "ut0mutex.h"
#include "sync0rw.ic"
Go to the source code of this file.
Classes | |
struct | rw_lock_stats_t |
Counters for RW locks. More... | |
struct | rw_lock_t |
The structure used in the spin lock implementation of a read-write lock. More... | |
struct | rw_lock_debug_t |
The structure for storing debug info of an rw-lock. More... | |
Enumerations | |
enum | rw_lock_type_t { RW_S_LATCH = 1, RW_X_LATCH = 2, RW_SX_LATCH = 4, RW_NO_LATCH = 8 } |
Functions | |
typedef | UT_LIST_BASE_NODE_T (rw_lock_t) rw_lock_list_t |
void | rw_lock_create_func (rw_lock_t *lock, latch_level_t level, const char *cmutex_name, const char *cfile_name, ulint cline) |
Creates, or rather, initializes an rw-lock object in a specified memory location (which must be appropriately aligned). More... | |
void | rw_lock_free_func (rw_lock_t *lock) |
Calling this function is obligatory only if the memory buffer containing the rw-lock is freed. More... | |
bool | rw_lock_validate (const rw_lock_t *lock) |
Checks that the rw-lock has been initialized and that there are no simultaneous shared and exclusive locks. More... | |
UNIV_INLINE bool | rw_lock_s_lock_low (rw_lock_t *lock, ulint pass, const char *file_name, ulint line) |
Low-level function which tries to lock an rw-lock in s-mode. More... | |
UNIV_INLINE void | rw_lock_s_lock_func (rw_lock_t *lock, ulint pass, const char *file_name, ulint line) |
NOTE! Use the corresponding macro, not directly this function, except if you supply the file name and line number. More... | |
UNIV_INLINE bool | rw_lock_x_lock_func_nowait (rw_lock_t *lock, const char *file_name, ulint line) |
NOTE! Use the corresponding macro, not directly this function! Lock an rw-lock in exclusive mode for the current thread if the lock can be obtained immediately. More... | |
UNIV_INLINE void | rw_lock_s_unlock_func (ulint pass, rw_lock_t *lock) |
Releases a shared mode lock. More... | |
void | rw_lock_x_lock_func (rw_lock_t *lock, ulint pass, const char *file_name, ulint line) |
NOTE! Use the corresponding macro, not directly this function! Lock an rw-lock in exclusive mode for the current thread. More... | |
bool | rw_lock_sx_lock_low (rw_lock_t *lock, ulint pass, const char *file_name, ulint line) |
Low-level function for acquiring an sx lock. More... | |
void | rw_lock_sx_lock_func (rw_lock_t *lock, ulint pass, const char *file_name, ulint line) |
NOTE! Use the corresponding macro, not directly this function! Lock an rw-lock in SX mode for the current thread. More... | |
UNIV_INLINE void | rw_lock_x_unlock_func (ulint pass, rw_lock_t *lock) |
Releases an exclusive mode lock. More... | |
UNIV_INLINE void | rw_lock_sx_unlock_func (ulint pass, rw_lock_t *lock) |
Releases an sx mode lock. More... | |
void | rw_lock_x_lock_move_ownership (rw_lock_t *lock) |
This function is used in the insert buffer to move the ownership of an x-latch on a buffer frame to the current thread. More... | |
UNIV_INLINE ulint | rw_lock_get_x_lock_count (const rw_lock_t *lock) |
Returns the value of writer_count for the lock. More... | |
UNIV_INLINE ulint | rw_lock_get_sx_lock_count (const rw_lock_t *lock) |
Returns the number of sx-lock for the lock. More... | |
UNIV_INLINE bool | rw_lock_get_waiters (const rw_lock_t *lock) |
Check if there are threads waiting for the rw-lock. More... | |
UNIV_INLINE ulint | rw_lock_get_writer (const rw_lock_t *lock) |
Returns the write-status of the lock - this function made more sense with the old rw_lock implementation. More... | |
UNIV_INLINE ulint | rw_lock_get_reader_count (const rw_lock_t *lock) |
Returns the number of readers (s-locks). More... | |
UNIV_INLINE bool | rw_lock_lock_word_decr (rw_lock_t *lock, ulint amount, lint threshold) |
Decrements lock_word the specified amount if it is greater than 0. More... | |
UNIV_INLINE lint | rw_lock_lock_word_incr (rw_lock_t *lock, ulint amount) |
Increments lock_word the specified amount and returns new value. More... | |
UNIV_INLINE void | rw_lock_set_writer_id_and_recursion_flag (rw_lock_t *lock, bool recursive) |
This function sets the lock->writer_thread and lock->recursive fields. More... | |
ibool | rw_lock_own (rw_lock_t *lock, ulint lock_type) |
Checks if the thread has locked the rw-lock in the specified mode, with the pass value == 0. More... | |
bool | rw_lock_own_flagged (const rw_lock_t *lock, rw_lock_flags_t flags) |
Checks if the thread has locked the rw-lock in the specified mode, with the pass value == 0. More... | |
bool | rw_lock_is_locked (rw_lock_t *lock, ulint lock_type) |
Checks if somebody has locked the rw-lock in the specified mode. More... | |
void | rw_lock_list_print_info (FILE *file) |
Prints debug info of currently locked rw-locks. More... | |
void | rw_lock_debug_print (FILE *f, const rw_lock_debug_t *info) |
Prints info of a debug struct. More... | |
UNIV_INLINE void | pfs_rw_lock_create_func (mysql_pfs_key_t key, rw_lock_t *lock, latch_level_t level, const char *cmutex_name, const char *cfile_name, ulint cline) |
Performance schema instrumented wrap function for rw_lock_create_func() NOTE! Please use the corresponding macro rw_lock_create(), not directly this function! More... | |
UNIV_INLINE void | pfs_rw_lock_x_lock_func (rw_lock_t *lock, ulint pass, const char *file_name, ulint line) |
Performance schema instrumented wrap function for rw_lock_x_lock_func() NOTE! Please use the corresponding macro rw_lock_x_lock(), not directly this function! More... | |
UNIV_INLINE bool | pfs_rw_lock_x_lock_func_nowait (rw_lock_t *lock, const char *file_name, ulint line) |
Performance schema instrumented wrap function for rw_lock_x_lock_func_nowait() NOTE! Please use the corresponding macro, not directly this function! More... | |
UNIV_INLINE void | pfs_rw_lock_s_lock_func (rw_lock_t *lock, ulint pass, const char *file_name, ulint line) |
Performance schema instrumented wrap function for rw_lock_s_lock_func() NOTE! Please use the corresponding macro rw_lock_s_lock(), not directly this function! More... | |
UNIV_INLINE ibool | pfs_rw_lock_s_lock_low (rw_lock_t *lock, ulint pass, const char *file_name, ulint line) |
Performance schema instrumented wrap function for rw_lock_s_lock_func() NOTE! Please use the corresponding macro rw_lock_s_lock(), not directly this function! More... | |
UNIV_INLINE void | pfs_rw_lock_s_unlock_func (ulint pass, rw_lock_t *lock) |
Performance schema instrumented wrap function for rw_lock_s_unlock_func() NOTE! Please use the corresponding macro rw_lock_s_unlock(), not directly this function! More... | |
UNIV_INLINE void | pfs_rw_lock_x_unlock_func (ulint pass, rw_lock_t *lock) |
Performance schema instrumented wrap function for rw_lock_x_unlock_func() NOTE! Please use the corresponding macro rw_lock_x_unlock(), not directly this function! More... | |
UNIV_INLINE void | pfs_rw_lock_sx_lock_func (rw_lock_t *lock, ulint pass, const char *file_name, ulint line) |
Performance schema instrumented wrap function for rw_lock_sx_lock_func() NOTE! Please use the corresponding macro rw_lock_sx_lock(), not directly this function! More... | |
UNIV_INLINE bool | pfs_rw_lock_sx_lock_low (rw_lock_t *lock, ulint pass, const char *file_name, ulint line) |
Performance schema instrumented wrap function for rw_lock_sx_lock_nowait() NOTE! Please use the corresponding macro, not directly this function! More... | |
UNIV_INLINE void | pfs_rw_lock_sx_unlock_func (ulint pass, rw_lock_t *lock) |
Performance schema instrumented wrap function for rw_lock_sx_unlock_func() NOTE! Please use the corresponding macro rw_lock_sx_unlock(), not directly this function! More... | |
UNIV_INLINE void | pfs_rw_lock_free_func (rw_lock_t *lock) |
Performance schema instrumented wrap function for rw_lock_free_func() NOTE! Please use the corresponding macro rw_lock_free(), not directly this function! More... | |
Variables | |
rw_lock_list_t | rw_lock_list |
ib_mutex_t | rw_lock_list_mutex |
rw_lock_stats_t | rw_lock_stats |
Counters for RW locks. More... | |
The read-write lock (for threads, not for database transactions)
Created 9/11/1995 Heikki Tuuri
#define rw_lock_create | ( | K, | |
L, | |||
level | |||
) | pfs_rw_lock_create_func((K), (L), (level), #L, __FILE__, __LINE__) |
#define rw_lock_free | ( | M | ) | pfs_rw_lock_free_func(M) |
#define rw_lock_s_lock | ( | M | ) | pfs_rw_lock_s_lock_func((M), 0, __FILE__, __LINE__) |
#define rw_lock_s_lock_gen | ( | M, | |
P | |||
) | pfs_rw_lock_s_lock_func((M), (P), __FILE__, __LINE__) |
#define rw_lock_s_lock_nowait | ( | M, | |
F, | |||
L | |||
) | pfs_rw_lock_s_lock_low((M), 0, (F), (L)) |
#define rw_lock_s_unlock | ( | L | ) | rw_lock_s_unlock_gen(L, 0) |
#define rw_lock_s_unlock_gen | ( | L, | |
P | |||
) | pfs_rw_lock_s_unlock_func(P, L) |
#define rw_lock_sx_lock | ( | M | ) | pfs_rw_lock_sx_lock_func((M), 0, __FILE__, __LINE__) |
#define rw_lock_sx_lock_gen | ( | M, | |
P | |||
) | pfs_rw_lock_sx_lock_func((M), (P), __FILE__, __LINE__) |
#define rw_lock_sx_lock_nowait | ( | M, | |
P | |||
) | pfs_rw_lock_sx_lock_low((M), (P), __FILE__, __LINE__) |
#define rw_lock_sx_unlock | ( | L | ) | pfs_rw_lock_sx_unlock_func(0, L) |
#define rw_lock_sx_unlock_gen | ( | L, | |
P | |||
) | pfs_rw_lock_sx_unlock_func(P, L) |
#define rw_lock_x_lock | ( | M | ) | pfs_rw_lock_x_lock_func((M), 0, __FILE__, __LINE__) |
#define rw_lock_x_lock_func_nowait_inline | ( | M, | |
F, | |||
L | |||
) | pfs_rw_lock_x_lock_func_nowait((M), (F), (L)) |
#define rw_lock_x_lock_gen | ( | M, | |
P | |||
) | pfs_rw_lock_x_lock_func((M), (P), __FILE__, __LINE__) |
#define rw_lock_x_lock_nowait | ( | M | ) | pfs_rw_lock_x_lock_func_nowait((M), __FILE__, __LINE__) |
#define rw_lock_x_unlock | ( | L | ) | rw_lock_x_unlock_gen(L, 0) |
#define rw_lock_x_unlock_gen | ( | L, | |
P | |||
) | pfs_rw_lock_x_unlock_func(P, L) |
#define X_LOCK_DECR 0x20000000 |
#define X_LOCK_HALF_DECR 0x10000000 |
enum rw_lock_type_t |
UNIV_INLINE void pfs_rw_lock_create_func | ( | mysql_pfs_key_t | key, |
rw_lock_t * | lock, | ||
latch_level_t | level, | ||
const char * | cmutex_name, | ||
const char * | cfile_name, | ||
ulint | cline | ||
) |
Performance schema instrumented wrap function for rw_lock_create_func() NOTE! Please use the corresponding macro rw_lock_create(), not directly this function!
[in] | key | key registered with performance schema |
[in] | lock | rw lock |
[in] | level | level |
[in] | cmutex_name | mutex name |
[in] | cline | file line where created |
[in] | cfile_name | file name where created |
UNIV_INLINE void pfs_rw_lock_free_func | ( | rw_lock_t * | lock | ) |
Performance schema instrumented wrap function for rw_lock_free_func() NOTE! Please use the corresponding macro rw_lock_free(), not directly this function!
in: rw-lock
UNIV_INLINE void pfs_rw_lock_s_lock_func | ( | rw_lock_t * | lock, |
ulint | pass, | ||
const char * | file_name, | ||
ulint | line | ||
) |
Performance schema instrumented wrap function for rw_lock_s_lock_func() NOTE! Please use the corresponding macro rw_lock_s_lock(), not directly this function!
[in] | lock | pointer to rw-lock |
[in] | pass | pass value; != 0, if the lock will be passed to another thread to unlock |
[in] | file_name | file name where lock requested |
[in] | line | line where requested |
UNIV_INLINE ibool pfs_rw_lock_s_lock_low | ( | rw_lock_t * | lock, |
ulint | pass, | ||
const char * | file_name, | ||
ulint | line | ||
) |
Performance schema instrumented wrap function for rw_lock_s_lock_func() NOTE! Please use the corresponding macro rw_lock_s_lock(), not directly this function!
[in] | lock | pointer to rw-lock |
[in] | pass | pass value; != 0, if the lock will be passed to another thread to unlock |
[in] | file_name | file name where lock requested |
[in] | line | line where requested |
UNIV_INLINE void pfs_rw_lock_s_unlock_func | ( | ulint | pass, |
rw_lock_t * | lock | ||
) |
Performance schema instrumented wrap function for rw_lock_s_unlock_func() NOTE! Please use the corresponding macro rw_lock_s_unlock(), not directly this function!
[in] | pass | pass value; != 0, if the lock may have been passed to another thread to unlock |
[in,out] | lock | rw-lock |
UNIV_INLINE void pfs_rw_lock_sx_lock_func | ( | rw_lock_t * | lock, |
ulint | pass, | ||
const char * | file_name, | ||
ulint | line | ||
) |
Performance schema instrumented wrap function for rw_lock_sx_lock_func() NOTE! Please use the corresponding macro rw_lock_sx_lock(), not directly this function!
[in] | lock | pointer to rw-lock |
[in] | pass | pass value; != 0, if the lock will be passed to another thread to unlock |
[in] | file_name | file name where lock requested |
[in] | line | line where requested |
UNIV_INLINE bool pfs_rw_lock_sx_lock_low | ( | rw_lock_t * | lock, |
ulint | pass, | ||
const char * | file_name, | ||
ulint | line | ||
) |
Performance schema instrumented wrap function for rw_lock_sx_lock_nowait() NOTE! Please use the corresponding macro, not directly this function!
[in] | lock | pointer to rw-lock |
[in] | pass | pass value; != 0, if the lock will be passed to another thread to unlock |
[in] | file_name | file name where lock requested |
[in] | line | line where requested |
UNIV_INLINE void pfs_rw_lock_sx_unlock_func | ( | ulint | pass, |
rw_lock_t * | lock | ||
) |
Performance schema instrumented wrap function for rw_lock_sx_unlock_func() NOTE! Please use the corresponding macro rw_lock_sx_unlock(), not directly this function!
[in,out] | lock | pointer to rw-lock |
[in] | pass | pass value; != 0, if the lock will be passed to another thread to unlock |
UNIV_INLINE void pfs_rw_lock_x_lock_func | ( | rw_lock_t * | lock, |
ulint | pass, | ||
const char * | file_name, | ||
ulint | line | ||
) |
Performance schema instrumented wrap function for rw_lock_x_lock_func() NOTE! Please use the corresponding macro rw_lock_x_lock(), not directly this function!
[in] | lock | pointer to rw-lock |
[in] | pass | pass value; != 0, if the lock will be passed to another thread to unlock |
[in] | file_name | file name where lock requested |
[in] | line | line where requested |
UNIV_INLINE bool pfs_rw_lock_x_lock_func_nowait | ( | rw_lock_t * | lock, |
const char * | file_name, | ||
ulint | line | ||
) |
Performance schema instrumented wrap function for rw_lock_x_lock_func_nowait() NOTE! Please use the corresponding macro, not directly this function!
[in] | lock | pointer to rw-lock |
[in] | file_name | file name where lock requested |
[in] | line | line where requested |
UNIV_INLINE void pfs_rw_lock_x_unlock_func | ( | ulint | pass, |
rw_lock_t * | lock | ||
) |
Performance schema instrumented wrap function for rw_lock_x_unlock_func() NOTE! Please use the corresponding macro rw_lock_x_unlock(), not directly this function!
[in] | pass | pass value; != 0, if the lock may have been passed to another thread to unlock |
[in,out] | lock | rw-lock |
void rw_lock_create_func | ( | rw_lock_t * | lock, |
latch_level_t | level, | ||
const char * | cmutex_name, | ||
const char * | cfile_name, | ||
ulint | cline | ||
) |
Creates, or rather, initializes an rw-lock object in a specified memory location (which must be appropriately aligned).
The rw-lock is initialized to the non-locked state. Explicit freeing of the rw-lock with rw_lock_free is necessary only if the memory block containing it is freed. in: file line where created
The rw-lock is initialized to the non-locked state. Explicit freeing of the rw-lock with rw_lock_free is necessary only if the memory block containing it is freed.
void rw_lock_debug_print | ( | FILE * | f, |
const rw_lock_debug_t * | info | ||
) |
Prints info of a debug struct.
[in] | f | Output stream |
[in] | info | Debug struct |
void rw_lock_free_func | ( | rw_lock_t * | lock | ) |
Calling this function is obligatory only if the memory buffer containing the rw-lock is freed.
Removes an rw-lock object from the global list. The rw-lock is checked to be in the non-locked state. in/out: rw-lock
Removes an rw-lock object from the global list. The rw-lock is checked to be in the non-locked state.
UNIV_INLINE ulint rw_lock_get_reader_count | ( | const rw_lock_t * | lock | ) |
Returns the number of readers (s-locks).
UNIV_INLINE ulint rw_lock_get_sx_lock_count | ( | const rw_lock_t * | lock | ) |
Returns the number of sx-lock for the lock.
Does not reserve the lock mutex, so the caller must be sure it is not changed during the call.
Check if there are threads waiting for the rw-lock.
UNIV_INLINE ulint rw_lock_get_writer | ( | const rw_lock_t * | lock | ) |
Returns the write-status of the lock - this function made more sense with the old rw_lock implementation.
UNIV_INLINE ulint rw_lock_get_x_lock_count | ( | const rw_lock_t * | lock | ) |
Returns the value of writer_count for the lock.
Does not reserve the lock mutex, so the caller must be sure it is not changed during the call.
Checks if somebody has locked the rw-lock in the specified mode.
void rw_lock_list_print_info | ( | FILE * | file | ) |
Prints debug info of currently locked rw-locks.
in: file where to print
Decrements lock_word the specified amount if it is greater than 0.
This is used by both s_lock and x_lock operations.
[in,out] | lock | rw-lock |
[in] | amount | amount to decrement |
[in] | threshold | threshold of judgement |
UNIV_INLINE lint rw_lock_lock_word_incr | ( | rw_lock_t * | lock, |
ulint | amount | ||
) |
Increments lock_word the specified amount and returns new value.
[in,out] | lock | rw-lock |
[in] | amount | amount to decrement |
ibool rw_lock_own | ( | rw_lock_t * | lock, |
ulint | lock_type | ||
) |
Checks if the thread has locked the rw-lock in the specified mode, with the pass value == 0.
bool rw_lock_own_flagged | ( | const rw_lock_t * | lock, |
rw_lock_flags_t | flags | ||
) |
Checks if the thread has locked the rw-lock in the specified mode, with the pass value == 0.
[in] | lock | rw-lock |
[in] | flags | specify lock types with OR of the rw_lock_flag_t values |
UNIV_INLINE void rw_lock_s_lock_func | ( | rw_lock_t * | lock, |
ulint | pass, | ||
const char * | file_name, | ||
ulint | line | ||
) |
NOTE! Use the corresponding macro, not directly this function, except if you supply the file name and line number.
Lock an rw-lock in shared mode for the current thread. If the rw-lock is locked in exclusive mode, or there is an exclusive lock request waiting, the function spins a preset time (controlled by srv_n_spin_wait_rounds), waiting for the lock, before suspending the thread.
[in] | lock | pointer to rw-lock |
[in] | pass | pass value; != 0, if the lock will be passed to another thread to unlock |
[in] | file_name | file name where lock requested |
[in] | line | line where requested |
UNIV_INLINE bool rw_lock_s_lock_low | ( | rw_lock_t * | lock, |
ulint | pass, | ||
const char * | file_name, | ||
ulint | line | ||
) |
Low-level function which tries to lock an rw-lock in s-mode.
Performs no spinning.
[in] | lock | pointer to rw-lock |
[in] | pass | pass value; != 0, if the lock will be passed to another thread to unlock |
[in] | file_name | file name where lock requested |
[in] | line | line where requested |
UNIV_INLINE void rw_lock_s_unlock_func | ( | ulint | pass, |
rw_lock_t * | lock | ||
) |
Releases a shared mode lock.
[in] | pass | pass value; != 0, if the lock will be passed to another thread to unlock |
[in,out] | lock | rw-lock |
This function sets the lock->writer_thread and lock->recursive fields.
Sets lock->recursive field using atomic release after setting lock->writer thread to ensure proper memory ordering of the two. Note that it is assumed that the caller of this function effectively owns the lock i.e.: nobody else is allowed to modify lock->writer_thread at this point in time. The protocol is that lock->writer_thread MUST be updated BEFORE the lock->recursive flag is set.
[in,out] | lock | lock to work on |
[in] | recursive | true if recursion allowed |
void rw_lock_sx_lock_func | ( | rw_lock_t * | lock, |
ulint | pass, | ||
const char * | file_name, | ||
ulint | line | ||
) |
NOTE! Use the corresponding macro, not directly this function! Lock an rw-lock in SX mode for the current thread.
If the rw-lock is locked in exclusive mode, or there is an exclusive lock request waiting, the function spins a preset time (controlled by SYNC_SPIN_ROUNDS), waiting for the lock, before suspending the thread. If the same thread has an x-lock on the rw-lock, locking succeed, with the following exception: if pass != 0, only a single sx-lock may be taken on the lock. NOTE: If the same thread has an s-lock, locking does not succeed! in: line where requested
If the rw-lock is locked in exclusive mode, or there is an exclusive lock request waiting, the function spins a preset time (controlled by SYNC_SPIN_ROUNDS), waiting for the lock, before suspending the thread. If the same thread has an x-lock on the rw-lock, locking succeed, with the following exception: if pass != 0, only a single sx-lock may be taken on the lock. NOTE: If the same thread has an s-lock, locking does not succeed!
Low-level function for acquiring an sx lock.
UNIV_INLINE void rw_lock_sx_unlock_func | ( | ulint | pass, |
rw_lock_t * | lock | ||
) |
Releases an sx mode lock.
[in] | pass | pass value; != 0, if the lock will be passed to another thread to unlock |
[in,out] | lock | rw-lock |
Checks that the rw-lock has been initialized and that there are no simultaneous shared and exclusive locks.
void rw_lock_x_lock_func | ( | rw_lock_t * | lock, |
ulint | pass, | ||
const char * | file_name, | ||
ulint | line | ||
) |
NOTE! Use the corresponding macro, not directly this function! Lock an rw-lock in exclusive mode for the current thread.
If the rw-lock is locked in shared or exclusive mode, or there is an exclusive lock request waiting, the function spins a preset time (controlled by srv_n_spin_wait_rounds), waiting for the lock, before suspending the thread. If the same thread has an x-lock on the rw-lock, locking succeed, with the following exception: if pass != 0, only a single x-lock may be taken on the lock. NOTE: If the same thread has an s-lock, locking does not succeed! in: line where requested
If the rw-lock is locked in shared or exclusive mode, or there is an exclusive lock request waiting, the function spins a preset time (controlled by srv_n_spin_wait_rounds), waiting for the lock before suspending the thread. If the same thread has an x-lock on the rw-lock, locking succeed, with the following exception: if pass != 0, only a single x-lock may be taken on the lock. NOTE: If the same thread has an s-lock, locking does not succeed!
UNIV_INLINE bool rw_lock_x_lock_func_nowait | ( | rw_lock_t * | lock, |
const char * | file_name, | ||
ulint | line | ||
) |
NOTE! Use the corresponding macro, not directly this function! Lock an rw-lock in exclusive mode for the current thread if the lock can be obtained immediately.
[in] | lock | pointer to rw-lock |
[in] | file_name | file name where lock requested |
[in] | line | line where requested |
void rw_lock_x_lock_move_ownership | ( | rw_lock_t * | lock | ) |
This function is used in the insert buffer to move the ownership of an x-latch on a buffer frame to the current thread.
The x-latch was set by the buffer read operation and it protected the buffer frame while the read was done. The ownership is moved because we want that the current thread is able to acquire a second x-latch which is stored in an mtr. This, in turn, is needed to pass the debug checks of index page operations. in: lock which was x-locked in the buffer read
The x-latch was set by the buffer read operation and it protected the buffer frame while the read was done. The ownership is moved because we want that the current thread is able to acquire a second x-latch which is stored in an mtr. This, in turn, is needed to pass the debug checks of index page operations.
UNIV_INLINE void rw_lock_x_unlock_func | ( | ulint | pass, |
rw_lock_t * | lock | ||
) |
Releases an exclusive mode lock.
[in] | pass | pass value; != 0, if the lock will be passed to another thread to unlock |
[in,out] | lock | rw-lock |
typedef UT_LIST_BASE_NODE_T | ( | rw_lock_t | ) |
rw_lock_list_t rw_lock_list |
ib_mutex_t rw_lock_list_mutex |
rw_lock_stats_t rw_lock_stats |
Counters for RW locks.