diff options
Diffstat (limited to 'storage/innobase/lock/lock0prdt.cc')
-rw-r--r-- | storage/innobase/lock/lock0prdt.cc | 88 |
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()); |