Commit 656a702c authored by Sergey Vojtovich's avatar Sergey Vojtovich

MDEV-17441 - InnoDB transition to C++11 atomics

buf_block_t::n_pointers transition to Atomic_counter.
parent 54b3fd25
...@@ -1561,7 +1561,7 @@ rtr_copy_buf( ...@@ -1561,7 +1561,7 @@ rtr_copy_buf(
matches->block.n_fields = block->n_fields; matches->block.n_fields = block->n_fields;
matches->block.left_side = block->left_side; matches->block.left_side = block->left_side;
#if defined UNIV_AHI_DEBUG || defined UNIV_DEBUG #if defined UNIV_AHI_DEBUG || defined UNIV_DEBUG
matches->block.n_pointers = block->n_pointers; matches->block.n_pointers = 0;
#endif /* UNIV_AHI_DEBUG || UNIV_DEBUG */ #endif /* UNIV_AHI_DEBUG || UNIV_DEBUG */
matches->block.curr_n_fields = block->curr_n_fields; matches->block.curr_n_fields = block->curr_n_fields;
matches->block.curr_left_side = block->curr_left_side; matches->block.curr_left_side = block->curr_left_side;
......
...@@ -245,11 +245,8 @@ ha_insert_for_fold_func( ...@@ -245,11 +245,8 @@ ha_insert_for_fold_func(
buf_block_t* prev_block = prev_node->block; buf_block_t* prev_block = prev_node->block;
ut_a(prev_block->frame ut_a(prev_block->frame
== page_align(prev_node->data)); == page_align(prev_node->data));
ut_a(my_atomic_addlint(&prev_block->n_pointers, ut_a(prev_block->n_pointers-- < MAX_N_POINTERS);
ulint(-1)) ut_a(block->n_pointers++ < MAX_N_POINTERS);
< MAX_N_POINTERS);
ut_a(my_atomic_addlint(&block->n_pointers, 1)
< MAX_N_POINTERS);
} }
prev_node->block = block; prev_node->block = block;
...@@ -280,8 +277,7 @@ ha_insert_for_fold_func( ...@@ -280,8 +277,7 @@ ha_insert_for_fold_func(
#if defined UNIV_AHI_DEBUG || defined UNIV_DEBUG #if defined UNIV_AHI_DEBUG || defined UNIV_DEBUG
if (table->adaptive) { if (table->adaptive) {
ut_a(my_atomic_addlint(&block->n_pointers, 1) ut_a(block->n_pointers++ < MAX_N_POINTERS);
< MAX_N_POINTERS);
} }
#endif /* UNIV_AHI_DEBUG || UNIV_DEBUG */ #endif /* UNIV_AHI_DEBUG || UNIV_DEBUG */
...@@ -342,8 +338,7 @@ ha_delete_hash_node( ...@@ -342,8 +338,7 @@ ha_delete_hash_node(
#if defined UNIV_AHI_DEBUG || defined UNIV_DEBUG #if defined UNIV_AHI_DEBUG || defined UNIV_DEBUG
if (table->adaptive) { if (table->adaptive) {
ut_a(del_node->block->frame = page_align(del_node->data)); ut_a(del_node->block->frame = page_align(del_node->data));
ut_a(my_atomic_addlint(&del_node->block->n_pointers, ulint(-1)) ut_a(del_node->block->n_pointers-- < MAX_N_POINTERS);
< MAX_N_POINTERS);
} }
#endif /* UNIV_AHI_DEBUG || UNIV_DEBUG */ #endif /* UNIV_AHI_DEBUG || UNIV_DEBUG */
...@@ -385,11 +380,8 @@ ha_search_and_update_if_found_func( ...@@ -385,11 +380,8 @@ ha_search_and_update_if_found_func(
if (node) { if (node) {
#if defined UNIV_AHI_DEBUG || defined UNIV_DEBUG #if defined UNIV_AHI_DEBUG || defined UNIV_DEBUG
if (table->adaptive) { if (table->adaptive) {
ut_a(my_atomic_addlint(&node->block->n_pointers, ut_a(node->block->n_pointers-- < MAX_N_POINTERS);
ulint(-1)) ut_a(new_block->n_pointers++ < MAX_N_POINTERS);
< MAX_N_POINTERS);
ut_a(my_atomic_addlint(&new_block->n_pointers, 1)
< MAX_N_POINTERS);
} }
node->block = new_block; node->block = new_block;
......
...@@ -1751,20 +1751,20 @@ struct buf_block_t{ ...@@ -1751,20 +1751,20 @@ struct buf_block_t{
/* @{ */ /* @{ */
# if defined UNIV_AHI_DEBUG || defined UNIV_DEBUG # if defined UNIV_AHI_DEBUG || defined UNIV_DEBUG
ulint n_pointers; /*!< used in debugging: the number of Atomic_counter<ulint>
n_pointers; /*!< used in debugging: the number of
pointers in the adaptive hash index pointers in the adaptive hash index
pointing to this frame; pointing to this frame;
protected by atomic memory access protected by atomic memory access
or btr_search_own_all(). */ or btr_search_own_all(). */
# define assert_block_ahi_empty(block) \ # define assert_block_ahi_empty(block) \
ut_a(my_atomic_addlint(&(block)->n_pointers, 0) == 0) ut_a((block)->n_pointers == 0)
# define assert_block_ahi_empty_on_init(block) do { \ # define assert_block_ahi_empty_on_init(block) do { \
UNIV_MEM_VALID(&(block)->n_pointers, sizeof (block)->n_pointers); \ UNIV_MEM_VALID(&(block)->n_pointers, sizeof (block)->n_pointers); \
assert_block_ahi_empty(block); \ assert_block_ahi_empty(block); \
} while (0) } while (0)
# define assert_block_ahi_valid(block) \ # define assert_block_ahi_valid(block) \
ut_a((block)->index \ ut_a((block)->index || (block)->n_pointers == 0)
|| my_atomic_loadlint(&(block)->n_pointers) == 0)
# else /* UNIV_AHI_DEBUG || UNIV_DEBUG */ # else /* UNIV_AHI_DEBUG || UNIV_DEBUG */
# define assert_block_ahi_empty(block) /* nothing */ # define assert_block_ahi_empty(block) /* nothing */
# define assert_block_ahi_empty_on_init(block) /* nothing */ # define assert_block_ahi_empty_on_init(block) /* nothing */
......
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