85
85
#if MLOG_8BYTES != 8
86
86
# error "MLOG_8BYTES != 8"
88
ptr = dyn_array_push(mlog, type);
88
ptr = (byte*) dyn_array_push(mlog, type);
90
90
if (type == MLOG_4BYTES) {
91
91
mach_write_to_4(ptr, val);
154
154
mlog_write_initial_log_record_fast(
155
155
/*===============================*/
156
/* out: new value of log_ptr */
157
byte* ptr, /* in: pointer to (inside) a buffer frame holding the
158
file page where modification is made */
159
byte type, /* in: log item type: MLOG_1BYTE, ... */
160
byte* log_ptr,/* in: pointer to mtr log which has been opened */
161
mtr_t* mtr) /* in: mtr */
156
/* out: new value of log_ptr */
157
const byte* ptr, /* in: pointer to (inside) a buffer
158
frame holding the file page where
159
modification is made */
160
byte type, /* in: log item type: MLOG_1BYTE, ... */
161
byte* log_ptr,/* in: pointer to mtr log which has
163
mtr_t* mtr) /* in: mtr */
163
166
buf_block_t* block;
167
ut_ad(mtr_memo_contains(mtr, buf_block_align(ptr),
168
MTR_MEMO_PAGE_X_FIX));
172
ut_ad(mtr_memo_contains_page(mtr, ptr, MTR_MEMO_PAGE_X_FIX));
169
173
ut_ad(type <= MLOG_BIGGEST_TYPE);
170
174
ut_ad(ptr && log_ptr);
172
block = buf_block_align(ptr);
174
space = buf_block_get_space(block);
175
offset = buf_block_get_page_no(block);
176
page = (const byte*) ut_align_down(ptr, UNIV_PAGE_SIZE);
177
space = mach_read_from_4(page + FIL_PAGE_ARCH_LOG_NO_OR_SPACE_ID);
178
offset = mach_read_from_4(page + FIL_PAGE_OFFSET);
177
180
mach_write_to_1(log_ptr, type);
182
185
mtr->n_log_recs++;
184
187
#ifdef UNIV_LOG_DEBUG
186
"Adding to mtr log record type %lu space %lu page no %lu\n",
187
type, space, offset); */
189
"Adding to mtr log record type %lu space %lu page no %lu\n",
190
(ulong) type, space, offset);
190
193
#ifdef UNIV_DEBUG
194
buf_pool_mutex_enter();
191
195
/* We now assume that all x-latched pages have been modified! */
196
block = (buf_block_t*) buf_block_align(ptr);
197
buf_pool_mutex_exit();
193
199
if (!mtr_memo_contains(mtr, block, MTR_MEMO_MODIFY)) {