diff options
author | Sergei Golubchik <sergii@pisem.net> | 2014-02-26 19:21:23 +0100 |
---|---|---|
committer | Sergei Golubchik <sergii@pisem.net> | 2014-02-26 19:21:23 +0100 |
commit | ac585e9ed5d4073b023387c77f90c278f137e469 (patch) | |
tree | 852de46e59c6763c02647a28f87af76df6d1c582 /storage/xtradb/mtr | |
parent | 6bc7bd0eb233aa08702bcc0f0c3ca8b73fc32294 (diff) | |
parent | b338c8eb56d92bc3a5f4665ad74e93a840eb96d3 (diff) | |
download | mariadb-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.cc | 29 |
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); + } + } } } |