⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 buf0buf.ic

📁 这是linux下运行的mysql软件包,可用于linux 下安装 php + mysql + apach 的网络配置
💻 IC
📖 第 1 页 / 共 2 页
字号:
buf_frame_get_lock_mutex(/*=====================*/			/* out: mutex */	byte*	ptr)	/* in: pointer to within a buffer frame */{	buf_block_t*	block;	block = buf_block_align(ptr);	return(block->lock_mutex);}/*************************************************************************Copies contents of a buffer frame to a given buffer. */UNIV_INLINEbyte*buf_frame_copy(/*===========*/				/* out: buf */	byte*		buf,	/* in: buffer to copy to */	buf_frame_t*	frame)	/* in: buffer frame */{	ut_ad(buf && frame);	ut_memcpy(buf, frame, UNIV_PAGE_SIZE);	return(buf);}/************************************************************************Calculates a folded value of a file page address to use in the page hashtable. */UNIV_INLINEulintbuf_page_address_fold(/*==================*/			/* out: the folded value */	ulint	space,	/* in: space id */	ulint	offset)	/* in: offset of the page within space */{	return((space << 20) + space + offset);}	/************************************************************************This function is used to get info if there is an io operationgoing on on a buffer page. */UNIV_INLINEiboolbuf_page_io_query(/*==============*/				/* out: TRUE if io going on */	buf_block_t*	block)	/* in: buf_pool block, must be bufferfixed */{	mutex_enter(&(buf_pool->mutex));	ut_ad(block->state == BUF_BLOCK_FILE_PAGE);	ut_ad(block->buf_fix_count > 0);	if (block->io_fix != 0) {		mutex_exit(&(buf_pool->mutex));		return(TRUE);	}	mutex_exit(&(buf_pool->mutex));	return(FALSE);}/************************************************************************Gets the youngest modification log sequence number for a frame. Returns zeroif not a file page or no modification occurred yet. */UNIV_INLINEdulintbuf_frame_get_newest_modification(/*==============================*/				/* out: newest modification to the page */	buf_frame_t*	frame)	/* in: pointer to a frame */{	buf_block_t*	block;	dulint		lsn;		ut_ad(frame);	block = buf_block_align(frame);	mutex_enter(&(buf_pool->mutex));	if (block->state == BUF_BLOCK_FILE_PAGE) {		lsn = block->newest_modification;	} else {		lsn = ut_dulint_zero;	}	mutex_exit(&(buf_pool->mutex));	return(lsn);}/************************************************************************Increments the modify clock of a frame by 1. The caller must (1) own thebuf_pool mutex and block bufferfix count has to be zero, (2) or own an x-lockon the block. */UNIV_INLINEdulintbuf_frame_modify_clock_inc(/*=======================*/				/* out: new value */	buf_frame_t*	frame)	/* in: pointer to a frame */{	buf_block_t*	block;	ut_ad(frame);	block = buf_block_align(frame);#ifdef UNIV_SYNC_DEBUG	ut_ad((mutex_own(&(buf_pool->mutex)) && (block->buf_fix_count == 0))	      || rw_lock_own(&(block->lock), RW_LOCK_EXCLUSIVE));#endif /*UNIV_SYNC_DEBUG */	UT_DULINT_INC(block->modify_clock);	return(block->modify_clock);}/************************************************************************Increments the modify clock of a frame by 1. The caller must (1) own thebuf_pool mutex and block bufferfix count has to be zero, (2) or own an x-lockon the block. */UNIV_INLINEdulintbuf_block_modify_clock_inc(/*=======================*/				/* out: new value */	buf_block_t*	block)	/* in: block */{#ifdef UNIV_SYNC_DEBUG	ut_ad((mutex_own(&(buf_pool->mutex)) && (block->buf_fix_count == 0))	      || rw_lock_own(&(block->lock), RW_LOCK_EXCLUSIVE));#endif /* UNIV_SYNC_DEBUG */	UT_DULINT_INC(block->modify_clock);	return(block->modify_clock);}/************************************************************************Returns the value of the modify clock. The caller must have an s-lock or x-lock on the block. */UNIV_INLINEdulintbuf_block_get_modify_clock(/*=======================*/				/* out: value */	buf_block_t*	block)	/* in: block */{#ifdef UNIV_SYNC_DEBUG	ut_ad(rw_lock_own(&(block->lock), RW_LOCK_SHARED)	      || rw_lock_own(&(block->lock), RW_LOCK_EXCLUSIVE));#endif /* UNIV_SYNC_DEBUG */	return(block->modify_clock);}#ifdef UNIV_SYNC_DEBUG/***********************************************************************Increments the bufferfix count. */UNIV_INLINEvoidbuf_block_buf_fix_inc_debug(/*========================*/	buf_block_t*	block,	/* in: block to bufferfix */	const char*	file __attribute__ ((unused)),	/* in: file name */	ulint		line __attribute__ ((unused)))	/* in: line */{#ifdef UNIV_SYNC_DEBUG		ibool	ret;	ret = rw_lock_s_lock_func_nowait(&(block->debug_latch), file, line);	ut_ad(ret == TRUE);#endif	block->buf_fix_count++;}#else /* UNIV_SYNC_DEBUG *//***********************************************************************Increments the bufferfix count. */UNIV_INLINEvoidbuf_block_buf_fix_inc(/*==================*/	buf_block_t*	block)	/* in: block to bufferfix */{	block->buf_fix_count++;}#endif /* UNIV_SYNC_DEBUG *//**********************************************************************Returns the control block of a file page, NULL if not found. */UNIV_INLINEbuf_block_t*buf_page_hash_get(/*==============*/			/* out: block, NULL if not found */	ulint	space,	/* in: space id */	ulint	offset)	/* in: offset of the page within space */{	buf_block_t*	block;	ulint		fold;		ut_ad(buf_pool);#ifdef UNIV_SYNC_DEBUG	ut_ad(mutex_own(&(buf_pool->mutex)));#endif /* UNIV_SYNC_DEBUG */	/* Look for the page in the hash table */	fold = buf_page_address_fold(space, offset);	HASH_SEARCH(hash, buf_pool->page_hash, fold, block,			(block->space == space) && (block->offset == offset));	ut_a(block == NULL || block->state == BUF_BLOCK_FILE_PAGE);		return(block);}/************************************************************************Tries to get the page, but if file io is required, releases all latchesin mtr down to the given savepoint. If io is required, this functionretrieves the page to buffer buf_pool, but does not bufferfix it or latchit. */UNIV_INLINEbuf_frame_t*buf_page_get_release_on_io(/*=======================*/				/* out: pointer to the frame, or NULL				if not in buffer buf_pool */	ulint	space,		/* in: space id */	ulint	offset,		/* in: offset of the page within space				in units of a page */	buf_frame_t* guess,	/* in: guessed frame or NULL */	ulint	rw_latch,	/* in: RW_X_LATCH, RW_S_LATCH,				or RW_NO_LATCH */	ulint	savepoint,	/* in: mtr savepoint */	mtr_t*	mtr)		/* in: mtr */{	buf_frame_t*	frame;	frame = buf_page_get_gen(space, offset, rw_latch, guess,				BUF_GET_IF_IN_POOL,				__FILE__, __LINE__,				mtr);	if (frame != NULL) {		return(frame);	}	/* The page was not in the buffer buf_pool: release the latches	down to the savepoint */			mtr_rollback_to_savepoint(mtr, savepoint);			buf_page_get(space, offset, RW_S_LATCH, mtr);			/* When we get here, the page is in buffer, but we release	the latches again down to the savepoint, before returning */	mtr_rollback_to_savepoint(mtr, savepoint);			return(NULL);}/************************************************************************Decrements the bufferfix count of a buffer control block and releasesa latch, if specified. */UNIV_INLINEvoidbuf_page_release(/*=============*/	buf_block_t*	block,		/* in: buffer block */	ulint		rw_latch,	/* in: RW_S_LATCH, RW_X_LATCH,					RW_NO_LATCH */	mtr_t*		mtr)		/* in: mtr */{	ulint	buf_fix_count;		ut_ad(block);	mutex_enter_fast(&(buf_pool->mutex));	ut_a(block->state == BUF_BLOCK_FILE_PAGE);	ut_a(block->buf_fix_count > 0);	if (rw_latch == RW_X_LATCH && mtr->modifications) {		buf_flush_note_modification(block, mtr);	}#ifdef UNIV_SYNC_DEBUG	rw_lock_s_unlock(&(block->debug_latch));#endif	buf_fix_count = block->buf_fix_count;	block->buf_fix_count = buf_fix_count - 1;	mutex_exit(&(buf_pool->mutex));	if (rw_latch == RW_S_LATCH) {		rw_lock_s_unlock(&(block->lock));	} else if (rw_latch == RW_X_LATCH) {		rw_lock_x_unlock(&(block->lock));	}}#ifdef UNIV_SYNC_DEBUG/*************************************************************************Adds latch level info for the rw-lock protecting the buffer frame. Thisshould be called in the debug version after a successful latching of apage if we know the latching order level of the acquired latch. IfUNIV_SYNC_DEBUG is not defined, compiles to an empty function. */UNIV_INLINEvoidbuf_page_dbg_add_level(/*===================*/	buf_frame_t*	frame __attribute__((unused)), /* in: buffer page                                where we have acquired latch */	ulint		level __attribute__((unused))) /* in: latching order                                level */{	sync_thread_add_level(&(buf_block_align(frame)->lock), level);}#endif /* UNIV_SYNC_DEBUG */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -