summaryrefslogtreecommitdiff
path: root/storage/xtradb/mtr
diff options
context:
space:
mode:
authorSergei Golubchik <sergii@pisem.net>2014-02-26 19:21:23 +0100
committerSergei Golubchik <sergii@pisem.net>2014-02-26 19:21:23 +0100
commitac585e9ed5d4073b023387c77f90c278f137e469 (patch)
tree852de46e59c6763c02647a28f87af76df6d1c582 /storage/xtradb/mtr
parent6bc7bd0eb233aa08702bcc0f0c3ca8b73fc32294 (diff)
parentb338c8eb56d92bc3a5f4665ad74e93a840eb96d3 (diff)
downloadmariadb-git-ac585e9ed5d4073b023387c77f90c278f137e469.tar.gz
Percona-Server-5.6.15-rel63.0.tar.gz merge
Diffstat (limited to 'storage/xtradb/mtr')
-rw-r--r--storage/xtradb/mtr/mtr0mtr.cc29
1 files changed, 16 insertions, 13 deletions
diff --git a/storage/xtradb/mtr/mtr0mtr.cc b/storage/xtradb/mtr/mtr0mtr.cc
index 02e8cbdbfcc..a4877f175a1 100644
--- a/storage/xtradb/mtr/mtr0mtr.cc
+++ b/storage/xtradb/mtr/mtr0mtr.cc
@@ -171,26 +171,29 @@ mtr_memo_note_modifications(
/*========================*/
mtr_t* mtr) /*!< in: mtr */
{
- dyn_array_t* memo;
- ulint offset;
-
ut_ad(!srv_read_only_mode);
ut_ad(mtr->magic_n == MTR_MAGIC_N);
ut_ad(mtr->state == MTR_COMMITTING); /* Currently only used in
commit */
- memo = &mtr->memo;
-
- offset = dyn_array_get_data_size(memo);
-
- while (offset > 0) {
- mtr_memo_slot_t* slot;
- offset -= sizeof(mtr_memo_slot_t);
+ for (const dyn_block_t* block = dyn_array_get_last_block(&mtr->memo);
+ block;
+ block = dyn_array_get_prev_block(&mtr->memo, block)) {
+ const mtr_memo_slot_t* start
+ = reinterpret_cast<mtr_memo_slot_t*>(
+ dyn_block_get_data(block));
+ mtr_memo_slot_t* slot
+ = reinterpret_cast<mtr_memo_slot_t*>(
+ dyn_block_get_data(block)
+ + dyn_block_get_used(block));
- slot = static_cast<mtr_memo_slot_t*>(
- dyn_array_get_element(memo, offset));
+ ut_ad(!(dyn_block_get_used(block) % sizeof(mtr_memo_slot_t)));
- mtr_memo_slot_note_modification(mtr, slot);
+ while (slot-- != start) {
+ if (slot->object != NULL) {
+ mtr_memo_slot_note_modification(mtr, slot);
+ }
+ }
}
}