29 #include "trx0rseg.ic"
39 UNIV_INTERN mysql_pfs_key_t rseg_mutex_key;
53 ut_a(
id < TRX_SYS_N_RSEGS);
57 ut_a(rseg == NULL ||
id == rseg->
id);
84 ut_ad(mutex_own(&kernel_mutex));
85 ut_ad(mtr_memo_contains(mtr, fil_space_get_latch(space, NULL),
89 block = fseg_create(space, 0,
90 TRX_RSEG + TRX_RSEG_FSEG_HEADER, mtr);
98 buf_block_dbg_add_level(block, SYNC_RSEG_HEADER_NEW);
112 flst_init(rsegf + TRX_RSEG_HISTORY, mtr);
115 for (i = 0; i < TRX_RSEG_N_SLOTS; i++) {
141 mutex_free(&rseg->
mutex);
143 if (! srv_apply_log_only) {
151 while (undo != NULL) {
162 while (undo != NULL) {
201 ulint sum_of_undo_sizes;
203 ut_ad(mutex_own(&kernel_mutex));
210 rseg->zip_size = zip_size;
211 rseg->page_no = page_no;
213 mutex_create(rseg_mutex_key, &rseg->
mutex, SYNC_RSEG);
228 rseg->curr_size =
mtr_read_ulint(rseg_header + TRX_RSEG_HISTORY_SIZE,
230 + 1 + sum_of_undo_sizes;
232 len =
flst_get_len(rseg_header + TRX_RSEG_HISTORY, mtr);
253 rseg_queue.
rseg = rseg;
275 trx_rseg_create_instance(
283 for (i = 0; i < TRX_SYS_N_RSEGS; i++) {
299 zip_size = space ? fil_space_get_zip_size(space) : 0;
301 rseg = trx_rseg_mem_create(
302 i, space, zip_size, page_no, ib_bh, mtr);
314 trx_rseg_create(
void)
325 mtr_x_lock(fil_space_get_latch(TRX_SYS_SPACE, NULL), &mtr);
327 mutex_enter(&kernel_mutex);
331 if (slot_no != ULINT_UNDEFINED) {
338 TRX_SYS_SPACE, 0, ULINT_MAX, slot_no, &mtr);
348 zip_size = space ? fil_space_get_zip_size(space) : 0;
350 rseg = trx_rseg_mem_create(
351 slot_no, space, zip_size, page_no,
355 mutex_exit(&kernel_mutex);
375 trx_rseg_create_instance(sys_header, ib_bh, mtr);