mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Minor cleanup.
lock_rec_unlock(): Cache first_lock and rewrite while() loops as for(). btr_cur_optimistic_update(): Use common error handling return. row_create_prebuilt(): Add Valgrind instrumentation.
This commit is contained in:
@ -1959,9 +1959,8 @@ any_extern:
|
||||
err = btr_cur_upd_lock_and_undo(flags, cursor, update, cmpl_info,
|
||||
thr, mtr, &roll_ptr);
|
||||
if (err != DB_SUCCESS) {
|
||||
err_exit:
|
||||
mem_heap_free(heap);
|
||||
return(err);
|
||||
|
||||
goto err_exit;
|
||||
}
|
||||
|
||||
/* Ok, we may do the replacement. Store on the page infimum the
|
||||
@ -2007,9 +2006,10 @@ err_exit:
|
||||
|
||||
page_cur_move_to_next(page_cursor);
|
||||
|
||||
err = DB_SUCCESS;
|
||||
err_exit:
|
||||
mem_heap_free(heap);
|
||||
|
||||
return(DB_SUCCESS);
|
||||
return(err);
|
||||
}
|
||||
|
||||
/*************************************************************//**
|
||||
|
@ -3935,8 +3935,8 @@ lock_rec_unlock(
|
||||
const rec_t* rec, /*!< in: record */
|
||||
enum lock_mode lock_mode)/*!< in: LOCK_S or LOCK_X */
|
||||
{
|
||||
lock_t* first_lock;
|
||||
lock_t* lock;
|
||||
lock_t* release_lock = NULL;
|
||||
ulint heap_no;
|
||||
|
||||
ut_ad(trx && rec);
|
||||
@ -3946,48 +3946,40 @@ lock_rec_unlock(
|
||||
|
||||
mutex_enter(&kernel_mutex);
|
||||
|
||||
lock = lock_rec_get_first(block, heap_no);
|
||||
first_lock = lock_rec_get_first(block, heap_no);
|
||||
|
||||
/* Find the last lock with the same lock_mode and transaction
|
||||
from the record. */
|
||||
|
||||
while (lock != NULL) {
|
||||
for (lock = first_lock; lock != NULL;
|
||||
lock = lock_rec_get_next(heap_no, lock)) {
|
||||
if (lock->trx == trx && lock_get_mode(lock) == lock_mode) {
|
||||
release_lock = lock;
|
||||
ut_a(!lock_get_wait(lock));
|
||||
lock_rec_reset_nth_bit(lock, heap_no);
|
||||
goto released;
|
||||
}
|
||||
|
||||
lock = lock_rec_get_next(heap_no, lock);
|
||||
}
|
||||
|
||||
/* If a record lock is found, release the record lock */
|
||||
mutex_exit(&kernel_mutex);
|
||||
ut_print_timestamp(stderr);
|
||||
fprintf(stderr,
|
||||
" InnoDB: Error: unlock row could not"
|
||||
" find a %lu mode lock on the record\n",
|
||||
(ulong) lock_mode);
|
||||
|
||||
if (UNIV_LIKELY(release_lock != NULL)) {
|
||||
lock_rec_reset_nth_bit(release_lock, heap_no);
|
||||
} else {
|
||||
mutex_exit(&kernel_mutex);
|
||||
ut_print_timestamp(stderr);
|
||||
fprintf(stderr,
|
||||
" InnoDB: Error: unlock row could not"
|
||||
" find a %lu mode lock on the record\n",
|
||||
(ulong) lock_mode);
|
||||
|
||||
return;
|
||||
}
|
||||
return;
|
||||
|
||||
released:
|
||||
/* Check if we can now grant waiting lock requests */
|
||||
|
||||
lock = lock_rec_get_first(block, heap_no);
|
||||
|
||||
while (lock != NULL) {
|
||||
for (lock = first_lock; lock != NULL;
|
||||
lock = lock_rec_get_next(heap_no, lock)) {
|
||||
if (lock_get_wait(lock)
|
||||
&& !lock_rec_has_to_wait_in_queue(lock)) {
|
||||
|
||||
/* Grant the lock */
|
||||
lock_grant(lock);
|
||||
}
|
||||
|
||||
lock = lock_rec_get_next(heap_no, lock);
|
||||
}
|
||||
|
||||
mutex_exit(&kernel_mutex);
|
||||
|
@ -625,6 +625,8 @@ row_create_prebuilt(
|
||||
|
||||
prebuilt->select_lock_type = LOCK_NONE;
|
||||
prebuilt->stored_select_lock_type = 99999999;
|
||||
UNIV_MEM_INVALID(&prebuilt->stored_select_lock_type,
|
||||
sizeof prebuilt->stored_select_lock_type);
|
||||
|
||||
prebuilt->search_tuple = dtuple_create(
|
||||
heap, 2 * dict_table_get_n_cols(table));
|
||||
|
Reference in New Issue
Block a user