summaryrefslogtreecommitdiff
path: root/storage/innobase/lock/lock0prdt.cc
diff options
context:
space:
mode:
Diffstat (limited to 'storage/innobase/lock/lock0prdt.cc')
-rw-r--r--storage/innobase/lock/lock0prdt.cc88
1 files changed, 36 insertions, 52 deletions
diff --git a/storage/innobase/lock/lock0prdt.cc b/storage/innobase/lock/lock0prdt.cc
index 9c6fd424005..2be58aef7a4 100644
--- a/storage/innobase/lock/lock0prdt.cc
+++ b/storage/innobase/lock/lock0prdt.cc
@@ -237,7 +237,7 @@ lock_prdt_has_lock(
{
lock_t* lock;
- ut_ad(lock_mutex_own());
+ mysql_mutex_assert_owner(&lock_sys.mutex);
ut_ad((precise_mode & LOCK_MODE_MASK) == LOCK_S
|| (precise_mode & LOCK_MODE_MASK) == LOCK_X);
ut_ad(!(precise_mode & LOCK_INSERT_INTENTION));
@@ -295,7 +295,7 @@ lock_prdt_other_has_conflicting(
the new lock will be on */
const trx_t* trx) /*!< in: our transaction */
{
- ut_ad(lock_mutex_own());
+ mysql_mutex_assert_owner(&lock_sys.mutex);
for (lock_t* lock = lock_rec_get_first(
lock_hash_get(mode), block, PRDT_HEAPNO);
@@ -392,7 +392,7 @@ lock_prdt_find_on_page(
{
lock_t* lock;
- ut_ad(lock_mutex_own());
+ mysql_mutex_assert_owner(&lock_sys.mutex);
for (lock = lock_sys.get_first(*lock_hash_get(type_mode),
block->page.id());
@@ -437,8 +437,7 @@ lock_prdt_add_to_queue(
/*!< in: TRUE if caller owns the
transaction mutex */
{
- ut_ad(lock_mutex_own());
- ut_ad(caller_owns_trx_mutex == trx_mutex_own(trx));
+ mysql_mutex_assert_owner(&lock_sys.mutex);
ut_ad(!dict_index_is_clust(index) && !dict_index_is_online_ddl(index));
ut_ad(type_mode & (LOCK_PREDICATE | LOCK_PRDT_PAGE));
@@ -532,7 +531,7 @@ lock_prdt_insert_check_and_lock(
trx_t* trx = thr_get_trx(thr);
- lock_mutex_enter();
+ mysql_mutex_lock(&lock_sys.mutex);
/* Because this code is invoked for a running transaction by
the thread that is serving the transaction, it is not necessary
@@ -546,7 +545,7 @@ lock_prdt_insert_check_and_lock(
lock = lock_rec_get_first(&lock_sys.prdt_hash, block, PRDT_HEAPNO);
if (lock == NULL) {
- lock_mutex_exit();
+ mysql_mutex_unlock(&lock_sys.mutex);
/* Update the page max trx id field */
page_update_max_trx_id(block, buf_block_get_page_zip(block),
@@ -578,7 +577,7 @@ lock_prdt_insert_check_and_lock(
lock_init_prdt_from_mbr(prdt, mbr, 0, trx->lock.lock_heap);
/* Note that we may get DB_SUCCESS also here! */
- trx_mutex_enter(trx);
+ trx->mutex.wr_lock();
err = lock_rec_enqueue_waiting(
#ifdef WITH_WSREP
@@ -587,12 +586,12 @@ lock_prdt_insert_check_and_lock(
LOCK_X | LOCK_PREDICATE | LOCK_INSERT_INTENTION,
block, PRDT_HEAPNO, index, thr, prdt);
- trx_mutex_exit(trx);
+ trx->mutex.wr_unlock();
} else {
err = DB_SUCCESS;
}
- lock_mutex_exit();
+ mysql_mutex_unlock(&lock_sys.mutex);
switch (err) {
case DB_SUCCESS_LOCKED_REC:
@@ -623,7 +622,7 @@ lock_prdt_update_parent(
lock_prdt_t* right_prdt, /*!< in: MBR on the new page */
const page_id_t page_id) /*!< in: parent page */
{
- lock_mutex_enter();
+ mysql_mutex_lock(&lock_sys.mutex);
/* Get all locks in parent */
for (lock_t *lock = lock_sys.get_first_prdt(page_id);
@@ -661,7 +660,7 @@ lock_prdt_update_parent(
}
}
- lock_mutex_exit();
+ mysql_mutex_unlock(&lock_sys.mutex);
}
/**************************************************************//**
@@ -682,16 +681,16 @@ lock_prdt_update_split_low(
for (lock = lock_sys.get_first(*lock_hash_get(type_mode), page_id);
lock;
lock = lock_rec_get_next_on_page(lock)) {
+ trx_t* trx = lock->trx;
/* First dealing with Page Lock */
if (lock->type_mode & LOCK_PRDT_PAGE) {
/* Duplicate the lock to new page */
- trx_mutex_enter(lock->trx);
+ trx->mutex.wr_lock();
lock_prdt_add_to_queue(lock->type_mode,
new_block,
lock->index,
- lock->trx, NULL, TRUE);
-
- trx_mutex_exit(lock->trx);
+ trx, NULL, TRUE);
+ trx->mutex.wr_unlock();
continue;
}
@@ -708,27 +707,13 @@ lock_prdt_update_split_low(
lock_prdt = lock_get_prdt_from_lock(lock);
- if (lock_prdt_consistent(lock_prdt, prdt, op)) {
-
- if (!lock_prdt_consistent(lock_prdt, new_prdt, op)) {
- /* Move the lock to new page */
- trx_mutex_enter(lock->trx);
- lock_prdt_add_to_queue(lock->type_mode,
- new_block,
- lock->index,
- lock->trx, lock_prdt,
- TRUE);
- trx_mutex_exit(lock->trx);
- }
- } else if (!lock_prdt_consistent(lock_prdt, new_prdt, op)) {
- /* Duplicate the lock to new page */
- trx_mutex_enter(lock->trx);
- lock_prdt_add_to_queue(lock->type_mode,
- new_block,
- lock->index,
- lock->trx, lock_prdt, TRUE);
-
- trx_mutex_exit(lock->trx);
+ if (!lock_prdt_consistent(lock_prdt, new_prdt, op)) {
+ /* Move the lock to new page */
+ trx->mutex.wr_lock();
+ lock_prdt_add_to_queue(lock->type_mode, new_block,
+ lock->index, trx, lock_prdt,
+ TRUE);
+ trx->mutex.wr_unlock();
}
}
}
@@ -743,7 +728,7 @@ lock_prdt_update_split(
lock_prdt_t* new_prdt, /*!< in: MBR on the new page */
const page_id_t page_id) /*!< in: page number */
{
- lock_mutex_enter();
+ mysql_mutex_lock(&lock_sys.mutex);
lock_prdt_update_split_low(new_block, prdt, new_prdt,
page_id, LOCK_PREDICATE);
@@ -751,7 +736,7 @@ lock_prdt_update_split(
lock_prdt_update_split_low(new_block, NULL, NULL,
page_id, LOCK_PRDT_PAGE);
- lock_mutex_exit();
+ mysql_mutex_unlock(&lock_sys.mutex);
}
/*********************************************************************//**
@@ -816,7 +801,7 @@ lock_prdt_lock(
index record, and this would not have been possible if another active
transaction had modified this secondary index record. */
- lock_mutex_enter();
+ mysql_mutex_lock(&lock_sys.mutex);
const unsigned prdt_mode = type_mode | mode;
lock_t* lock = lock_sys.get_first(hash, block->page.id());
@@ -831,7 +816,7 @@ lock_prdt_lock(
status = LOCK_REC_SUCCESS_CREATED;
} else {
- trx_mutex_enter(trx);
+ trx->mutex.wr_lock();
if (lock_rec_get_next_on_page(lock)
|| lock->trx != trx
@@ -871,10 +856,9 @@ lock_prdt_lock(
}
}
- trx_mutex_exit(trx);
-
+ trx->mutex.wr_unlock();
} else {
- trx_mutex_exit(trx);
+ trx->mutex.wr_unlock();
if (!lock_rec_get_nth_bit(lock, PRDT_HEAPNO)) {
lock_rec_set_nth_bit(lock, PRDT_HEAPNO);
@@ -883,7 +867,7 @@ lock_prdt_lock(
}
}
- lock_mutex_exit();
+ mysql_mutex_unlock(&lock_sys.mutex);
if (status == LOCK_REC_SUCCESS_CREATED && type_mode == LOCK_PREDICATE) {
/* Append the predicate in the lock record */
@@ -913,7 +897,7 @@ lock_place_prdt_page_lock(
index record, and this would not have been possible if another active
transaction had modified this secondary index record. */
- lock_mutex_enter();
+ mysql_mutex_lock(&lock_sys.mutex);
const lock_t* lock = lock_sys.get_first_prdt_page(page_id);
const ulint mode = LOCK_S | LOCK_PRDT_PAGE;
@@ -943,7 +927,7 @@ lock_place_prdt_page_lock(
#endif /* PRDT_DIAG */
}
- lock_mutex_exit();
+ mysql_mutex_unlock(&lock_sys.mutex);
return(DB_SUCCESS);
}
@@ -956,11 +940,11 @@ bool lock_test_prdt_page_lock(const trx_t *trx, const page_id_t page_id)
{
lock_t* lock;
- lock_mutex_enter();
+ mysql_mutex_lock(&lock_sys.mutex);
lock = lock_sys.get_first_prdt_page(page_id);
- lock_mutex_exit();
+ mysql_mutex_unlock(&lock_sys.mutex);
return(!lock || trx == lock->trx);
}
@@ -976,7 +960,7 @@ lock_prdt_rec_move(
const buf_block_t* donator) /*!< in: buffer block containing
the donating record */
{
- lock_mutex_enter();
+ mysql_mutex_lock(&lock_sys.mutex);
for (lock_t *lock = lock_rec_get_first(&lock_sys.prdt_hash,
donator, PRDT_HEAPNO);
@@ -994,7 +978,7 @@ lock_prdt_rec_move(
lock_prdt, FALSE);
}
- lock_mutex_exit();
+ mysql_mutex_unlock(&lock_sys.mutex);
}
/** Removes predicate lock objects set on an index page which is discarded.
@@ -1008,7 +992,7 @@ lock_prdt_page_free_from_discard(
lock_t* lock;
lock_t* next_lock;
- ut_ad(lock_mutex_own());
+ mysql_mutex_assert_owner(&lock_sys.mutex);
lock = lock_sys.get_first(*lock_hash, block->page.id());