📄 trx0rseg.ic
字号:
/******************************************************Rollback segment(c) 1996 Innobase OyCreated 3/26/1996 Heikki Tuuri*******************************************************/#include "srv0srv.h"/**********************************************************************Gets a rollback segment header. */UNIV_INLINEtrx_rsegf_t*trx_rsegf_get(/*==========*/ /* out: rollback segment header, page x-latched */ ulint space, /* in: space where placed */ ulint page_no, /* in: page number of the header */ mtr_t* mtr) /* in: mtr */{ trx_rsegf_t* header; header = TRX_RSEG + buf_page_get(space, page_no, RW_X_LATCH, mtr);#ifdef UNIV_SYNC_DEBUG buf_page_dbg_add_level(header, SYNC_RSEG_HEADER);#endif /* UNIV_SYNC_DEBUG */ return(header);}/**********************************************************************Gets a newly created rollback segment header. */UNIV_INLINEtrx_rsegf_t*trx_rsegf_get_new(/*==============*/ /* out: rollback segment header, page x-latched */ ulint space, /* in: space where placed */ ulint page_no, /* in: page number of the header */ mtr_t* mtr) /* in: mtr */{ trx_rsegf_t* header; header = TRX_RSEG + buf_page_get(space, page_no, RW_X_LATCH, mtr);#ifdef UNIV_SYNC_DEBUG buf_page_dbg_add_level(header, SYNC_RSEG_HEADER_NEW);#endif /* UNIV_SYNC_DEBUG */ return(header);}/*******************************************************************Gets the file page number of the nth undo log slot. */UNIV_INLINEulinttrx_rsegf_get_nth_undo(/*===================*/ /* out: page number of the undo log segment */ trx_rsegf_t* rsegf, /* in: rollback segment header */ ulint n, /* in: index of slot */ mtr_t* mtr) /* in: mtr */{ if (UNIV_UNLIKELY(n >= TRX_RSEG_N_SLOTS)) { fprintf(stderr, "InnoDB: Error: trying to get slot %lu of rseg\n", (unsigned long) n); ut_error; } return(mtr_read_ulint(rsegf + TRX_RSEG_UNDO_SLOTS + n * TRX_RSEG_SLOT_SIZE, MLOG_4BYTES, mtr));}/*******************************************************************Sets the file page number of the nth undo log slot. */UNIV_INLINEvoidtrx_rsegf_set_nth_undo(/*===================*/ trx_rsegf_t* rsegf, /* in: rollback segment header */ ulint n, /* in: index of slot */ ulint page_no,/* in: page number of the undo log segment */ mtr_t* mtr) /* in: mtr */{ if (UNIV_UNLIKELY(n >= TRX_RSEG_N_SLOTS)) { fprintf(stderr, "InnoDB: Error: trying to set slot %lu of rseg\n", (unsigned long) n); ut_error; } mlog_write_ulint(rsegf + TRX_RSEG_UNDO_SLOTS + n * TRX_RSEG_SLOT_SIZE, page_no, MLOG_4BYTES, mtr);}/********************************************************************Looks for a free slot for an undo log segment. */UNIV_INLINEulinttrx_rsegf_undo_find_free(/*=====================*/ /* out: slot index or ULINT_UNDEFINED if not found */ trx_rsegf_t* rsegf, /* in: rollback segment header */ mtr_t* mtr) /* in: mtr */{ ulint i; ulint page_no; for (i = 0; i < TRX_RSEG_N_SLOTS; i++) { page_no = trx_rsegf_get_nth_undo(rsegf, i, mtr); if (page_no == FIL_NULL) { return(i); } } return(ULINT_UNDEFINED);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -