MySQL 8.4.3
Source Code Documentation
|
#include <sys/types.h>
#include "my_inttypes.h"
#include "my_list.h"
#include "my_thread_local.h"
#include "mysql/psi/mysql_cond.h"
#include "mysql/psi/mysql_mutex.h"
Go to the source code of this file.
Classes | |
struct | Lock_descriptor |
struct | THR_LOCK_INFO |
struct | THR_LOCK_DATA |
struct | st_lock_list |
struct | THR_LOCK |
Enumerations | |
enum | thr_lock_type { TL_IGNORE = -1 , TL_UNLOCK , TL_READ_DEFAULT , TL_READ , TL_READ_WITH_SHARED_LOCKS , TL_READ_HIGH_PRIORITY , TL_READ_NO_INSERT , TL_WRITE_ALLOW_WRITE , TL_WRITE_CONCURRENT_DEFAULT , TL_WRITE_CONCURRENT_INSERT , TL_WRITE_DEFAULT , TL_WRITE_LOW_PRIORITY , TL_WRITE , TL_WRITE_ONLY , TL_IGNORE = -1 , TL_UNLOCK , TL_READ_DEFAULT , TL_READ , TL_READ_WITH_SHARED_LOCKS , TL_READ_HIGH_PRIORITY , TL_READ_NO_INSERT , TL_WRITE_ALLOW_WRITE , TL_WRITE_CONCURRENT_DEFAULT , TL_WRITE_CONCURRENT_INSERT , TL_WRITE_DEFAULT , TL_WRITE_LOW_PRIORITY , TL_WRITE , TL_WRITE_ONLY } |
enum | thr_locked_row_action { THR_DEFAULT , THR_WAIT , THR_NOWAIT , THR_SKIP } |
enum | enum_thr_lock_result { THR_LOCK_SUCCESS = 0 , THR_LOCK_ABORTED = 1 , THR_LOCK_WAIT_TIMEOUT = 2 , THR_LOCK_DEADLOCK = 3 } |
Functions | |
void | thr_lock_info_init (THR_LOCK_INFO *info, my_thread_id thread_id, mysql_cond_t *suspend) |
void | thr_lock_init (THR_LOCK *lock) |
void | thr_lock_delete (THR_LOCK *lock) |
void | thr_lock_data_init (THR_LOCK *lock, THR_LOCK_DATA *data, void *status_param) |
enum enum_thr_lock_result | thr_lock (THR_LOCK_DATA *data, THR_LOCK_INFO *owner, enum thr_lock_type lock_type, ulong lock_wait_timeout) |
void | thr_unlock (THR_LOCK_DATA *data) |
enum enum_thr_lock_result | thr_multi_lock (THR_LOCK_DATA **data, uint count, THR_LOCK_INFO *owner, ulong lock_wait_timeout) |
void | thr_multi_unlock (THR_LOCK_DATA **data, uint count) |
void | thr_lock_merge_status (THR_LOCK_DATA **data, uint count) |
Ensure that all locks for a given table have the same status_param. More... | |
void | thr_abort_locks_for_thread (THR_LOCK *lock, my_thread_id thread) |
void | thr_print_locks (void) |
void | thr_set_lock_wait_callback (void(*before_wait)(void), void(*after_wait)(void)) |
Variables | |
mysql_mutex_t | THR_LOCK_lock |
ulong | locks_immediate |
ulong | locks_waited |
ulong | max_write_lock_count |
enum thr_lock_type | thr_upgraded_concurrent_insert_lock |
LIST * | thr_lock_thread_list |
enum enum_thr_lock_result |
enum thr_lock_type |
void thr_abort_locks_for_thread | ( | THR_LOCK * | lock, |
my_thread_id | thread | ||
) |
enum enum_thr_lock_result thr_lock | ( | THR_LOCK_DATA * | data, |
THR_LOCK_INFO * | owner, | ||
enum thr_lock_type | lock_type, | ||
ulong | lock_wait_timeout | ||
) |
void thr_lock_data_init | ( | THR_LOCK * | lock, |
THR_LOCK_DATA * | data, | ||
void * | status_param | ||
) |
void thr_lock_delete | ( | THR_LOCK * | lock | ) |
void thr_lock_info_init | ( | THR_LOCK_INFO * | info, |
my_thread_id | thread_id, | ||
mysql_cond_t * | suspend | ||
) |
void thr_lock_init | ( | THR_LOCK * | lock | ) |
void thr_lock_merge_status | ( | THR_LOCK_DATA ** | data, |
uint | count | ||
) |
Ensure that all locks for a given table have the same status_param.
This is a MyISAM and possibly Maria specific crutch. MyISAM engine stores data file length, record count and other table properties in status_param member of handler. When a table is locked, connection-local copy is made from a global copy (myisam_share) by mi_get_status(). When a table is unlocked, the changed status is transferred back to the global share by mi_update_status().
One thing MyISAM doesn't do is to ensure that when the same table is opened twice in a connection all instances share the same status_param. This is necessary, however: for one, to keep all instances of a connection "on the same page" with regard to the current state of the table. For other, unless this is done, myisam_share will always get updated from the last unlocked instance (in mi_update_status()), and when this instance was not the one that was used to update data, records may be lost.
For each table, this function looks up the last lock_data in the list of acquired locks, and makes sure that all other instances share status_param with it.
enum enum_thr_lock_result thr_multi_lock | ( | THR_LOCK_DATA ** | data, |
uint | count, | ||
THR_LOCK_INFO * | owner, | ||
ulong | lock_wait_timeout | ||
) |
void thr_multi_unlock | ( | THR_LOCK_DATA ** | data, |
uint | count | ||
) |
void thr_print_locks | ( | void | ) |
void thr_set_lock_wait_callback | ( | void(*)(void) | before_wait, |
void(*)(void) | after_wait | ||
) |
void thr_unlock | ( | THR_LOCK_DATA * | data | ) |
|
extern |
ulong locks_waited |
|
extern |
|
extern |
|
extern |
|
extern |