diff options
author | Marko Mäkelä <marko.makela@mariadb.com> | 2017-01-18 12:53:35 +0200 |
---|---|---|
committer | Marko Mäkelä <marko.makela@mariadb.com> | 2017-01-18 14:57:10 +0200 |
commit | 8780b895296a685da8c0bb2c6f301f748c87cf57 (patch) | |
tree | 1a3b8b68476e42c476a9af38f5932e277cc8467b /storage/innobase/gis | |
parent | 95ebca7197e42f06fc17a624802bfd5aeb178cf1 (diff) | |
download | mariadb-git-8780b895296a685da8c0bb2c6f301f748c87cf57.tar.gz |
MDEV-11831 Make InnoDB mini-transaction memo checks stricter
InnoDB keeps track of buffer-fixed buf_block_t or acquired rw_lock_t
within a mini-transaction. There are some memo_contains assertions
in the code that document when certain blocks or rw_locks must be held.
But, these assertions only check the mini-transaction memo, not the fact
whether the rw_lock_t are actually being held by the caller.
btr_pcur_store_position(): Remove #ifdef, and assert that the block
is always buffer-fixed.
rtr_pcur_getnext_from_path(), rtr_pcur_open_low(),
ibuf_rec_get_page_no_func(), ibuf_rec_get_space_func(),
ibuf_rec_get_info_func(), ibuf_rec_get_op_type_func(),
ibuf_build_entry_from_ibuf_rec_func(), ibuf_rec_get_volume_func(),
ibuf_get_merge_page_nos_func(), ibuf_get_volume_buffered_count_func()
ibuf_get_entry_counter_low_func(), page_set_ssn_id(),
row_vers_old_has_index_entry(), row_vers_build_for_consistent_read(),
row_vers_build_for_semi_consistent_read(),
trx_undo_prev_version_build():
Make use of mtr_memo_contains_page_flagged().
mtr_t::memo_contains(): Take a const memo. Assert rw_lock_own().
FindPage, FlaggedCheck: Assert rw_lock_own_flagged().
Diffstat (limited to 'storage/innobase/gis')
-rw-r--r-- | storage/innobase/gis/gis0sea.cc | 18 |
1 files changed, 8 insertions, 10 deletions
diff --git a/storage/innobase/gis/gis0sea.cc b/storage/innobase/gis/gis0sea.cc index 99543ef8c9c..0bc96199486 100644 --- a/storage/innobase/gis/gis0sea.cc +++ b/storage/innobase/gis/gis0sea.cc @@ -1,6 +1,7 @@ /***************************************************************************** Copyright (c) 2016, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2017, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -129,12 +130,10 @@ rtr_pcur_getnext_from_path( || latch_mode & BTR_MODIFY_LEAF); mtr_s_lock(dict_index_get_lock(index), mtr); } else { - ut_ad(mtr_memo_contains(mtr, dict_index_get_lock(index), - MTR_MEMO_SX_LOCK) - || mtr_memo_contains(mtr, dict_index_get_lock(index), - MTR_MEMO_S_LOCK) - || mtr_memo_contains(mtr, dict_index_get_lock(index), - MTR_MEMO_X_LOCK)); + ut_ad(mtr_memo_contains_flagged(mtr, &index->lock, + MTR_MEMO_SX_LOCK + | MTR_MEMO_S_LOCK + | MTR_MEMO_X_LOCK)); } const page_size_t& page_size = dict_table_page_size(index->table); @@ -601,10 +600,9 @@ rtr_pcur_open_low( } if (latch_mode & BTR_MODIFY_TREE) { - ut_ad(mtr_memo_contains(mtr, dict_index_get_lock(index), - MTR_MEMO_X_LOCK) - || mtr_memo_contains(mtr, dict_index_get_lock(index), - MTR_MEMO_SX_LOCK)); + ut_ad(mtr_memo_contains_flagged(mtr, &index->lock, + MTR_MEMO_X_LOCK + | MTR_MEMO_SX_LOCK)); tree_latched = true; } |