Commit ab6a5b47 authored by Marko Mäkelä's avatar Marko Mäkelä

Merge a change from mysql-5.1-innodb:

  ------------------------------------------------------------
  revno: 3490
  revision-id: marko.makela@oracle.com-20100601120751-1uq7bbta5n7ts0qr
  parent: marko.makela@oracle.com-20100601120521-q48hk05ne4j1s2o0
  committer: Marko Mäkelä <marko.makela@oracle.com>
  branch nick: 5.1-innodb
  timestamp: Tue 2010-06-01 15:07:51 +0300
  message:
    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.
parent 0902cd6b
...@@ -2079,9 +2079,8 @@ btr_cur_optimistic_update( ...@@ -2079,9 +2079,8 @@ btr_cur_optimistic_update(
err = btr_cur_upd_lock_and_undo(flags, cursor, update, cmpl_info, err = btr_cur_upd_lock_and_undo(flags, cursor, update, cmpl_info,
thr, mtr, &roll_ptr); thr, mtr, &roll_ptr);
if (err != DB_SUCCESS) { if (err != DB_SUCCESS) {
err_exit:
mem_heap_free(heap); goto err_exit;
return(err);
} }
/* Ok, we may do the replacement. Store on the page infimum the /* Ok, we may do the replacement. Store on the page infimum the
...@@ -2127,9 +2126,10 @@ btr_cur_optimistic_update( ...@@ -2127,9 +2126,10 @@ btr_cur_optimistic_update(
page_cur_move_to_next(page_cursor); page_cur_move_to_next(page_cursor);
err = DB_SUCCESS;
err_exit:
mem_heap_free(heap); mem_heap_free(heap);
return(err);
return(DB_SUCCESS);
} }
/*************************************************************//** /*************************************************************//**
......
...@@ -3935,8 +3935,8 @@ lock_rec_unlock( ...@@ -3935,8 +3935,8 @@ lock_rec_unlock(
const rec_t* rec, /*!< in: record */ const rec_t* rec, /*!< in: record */
enum lock_mode lock_mode)/*!< in: LOCK_S or LOCK_X */ enum lock_mode lock_mode)/*!< in: LOCK_S or LOCK_X */
{ {
lock_t* first_lock;
lock_t* lock; lock_t* lock;
lock_t* release_lock = NULL;
ulint heap_no; ulint heap_no;
ut_ad(trx && rec); ut_ad(trx && rec);
...@@ -3946,48 +3946,40 @@ lock_rec_unlock( ...@@ -3946,48 +3946,40 @@ lock_rec_unlock(
mutex_enter(&kernel_mutex); 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 /* Find the last lock with the same lock_mode and transaction
from the record. */ 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) { if (lock->trx == trx && lock_get_mode(lock) == lock_mode) {
release_lock = lock;
ut_a(!lock_get_wait(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);
if (UNIV_LIKELY(release_lock != NULL)) { fprintf(stderr,
lock_rec_reset_nth_bit(release_lock, heap_no); " InnoDB: Error: unlock row could not"
} else { " find a %lu mode lock on the record\n",
mutex_exit(&kernel_mutex); (ulong) lock_mode);
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 */ /* Check if we can now grant waiting lock requests */
lock = lock_rec_get_first(block, heap_no); for (lock = first_lock; lock != NULL;
lock = lock_rec_get_next(heap_no, lock)) {
while (lock != NULL) {
if (lock_get_wait(lock) if (lock_get_wait(lock)
&& !lock_rec_has_to_wait_in_queue(lock)) { && !lock_rec_has_to_wait_in_queue(lock)) {
/* Grant the lock */ /* Grant the lock */
lock_grant(lock); lock_grant(lock);
} }
lock = lock_rec_get_next(heap_no, lock);
} }
mutex_exit(&kernel_mutex); mutex_exit(&kernel_mutex);
......
...@@ -625,6 +625,8 @@ row_create_prebuilt( ...@@ -625,6 +625,8 @@ row_create_prebuilt(
prebuilt->select_lock_type = LOCK_NONE; prebuilt->select_lock_type = LOCK_NONE;
prebuilt->stored_select_lock_type = 99999999; 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( prebuilt->search_tuple = dtuple_create(
heap, 2 * dict_table_get_n_cols(table)); heap, 2 * dict_table_get_n_cols(table));
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment