亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? lock_region.c

?? File system using stacked.
?? C
字號:
/*- * See the file LICENSE for redistribution information. * * Copyright (c) 1996-2002 *	Sleepycat Software.  All rights reserved. */#include "db_config.h"#ifndef lintstatic const char revid[] = "$Id: lock_region.c,v 1.1.1.1 2004/08/19 23:53:56 gopalan Exp $";#endif /* not lint */#ifndef __KERNEL__# ifndef NO_SYSTEM_INCLUDES#  include <sys/types.h>#  include <string.h># endif#else # include <linux/types.h># include <linux/string.h>#endif#include "db_int.h"#include "dbinc/db_shash.h"#include "dbinc/lock.h"static int  __lock_init __P((DB_ENV *, DB_LOCKTAB *));static size_t	    __lock_region_size __P((DB_ENV *));#ifdef HAVE_MUTEX_SYSTEM_RESOURCESstatic size_t __lock_region_maint __P((DB_ENV *));#endif/* * The conflict arrays are set up such that the row is the lock you are * holding and the column is the lock that is desired. */#define	DB_LOCK_RIW_N	9static const u_int8_t db_riw_conflicts[] = {/*         N   R   W   WT  IW  IR  RIW DR  WW *//*   N */  0,  0,  0,  0,  0,  0,  0,  0,  0,/*   R */  0,  0,  1,  0,  1,  0,  1,  0,  1,/*   W */  0,  1,  1,  1,  1,  1,  1,  1,  1,/*  WT */  0,  0,  0,  0,  0,  0,  0,  0,  0,/*  IW */  0,  1,  1,  0,  0,  0,  0,  1,  1,/*  IR */  0,  0,  1,  0,  0,  0,  0,  0,  1,/* RIW */  0,  1,  1,  0,  0,  0,  0,  1,  1,/*  DR */  0,  0,  1,  0,  1,  0,  1,  0,  0,/*  WW */  0,  1,  1,  0,  1,  1,  1,  0,  1};/* * This conflict array is used for concurrent db access (CDB).  It uses * the same locks as the db_riw_conflicts array, but adds an IW mode to * be used for write cursors. */#define	DB_LOCK_CDB_N	5static const u_int8_t db_cdb_conflicts[] = {	/*		N	R	W	WT	IW */	/*   N */	0,	0,	0,	0,	0,	/*   R */	0,	0,	1,	0,	0,	/*   W */	0,	1,	1,	1,	1,	/*  WT */	0,	0,	0,	0,	0,	/*  IW */	0,	0,	1,	0,	1};/* * __lock_open -- *	Internal version of lock_open: only called from DB_ENV->open. * * PUBLIC: int __lock_open __P((DB_ENV *)); */int__lock_open(dbenv)	DB_ENV *dbenv;{	DB_LOCKREGION *region;	DB_LOCKTAB *lt;	size_t size;	int ret;	/* Create the lock table structure. */	if ((ret = __os_calloc(dbenv, 1, sizeof(DB_LOCKTAB), &lt)) != 0)		return (ret);	lt->dbenv = dbenv;	/* Join/create the lock region. */	lt->reginfo.type = REGION_TYPE_LOCK;	lt->reginfo.id = INVALID_REGION_ID;	lt->reginfo.mode = dbenv->db_mode;	lt->reginfo.flags = REGION_JOIN_OK;	if (F_ISSET(dbenv, DB_ENV_CREATE))		F_SET(&lt->reginfo, REGION_CREATE_OK);	size = __lock_region_size(dbenv);	if ((ret = __db_r_attach(dbenv, &lt->reginfo, size)) != 0)		goto err;	/* If we created the region, initialize it. */	if (F_ISSET(&lt->reginfo, REGION_CREATE))		if ((ret = __lock_init(dbenv, lt)) != 0)			goto err;	/* Set the local addresses. */	region = lt->reginfo.primary =	    R_ADDR(&lt->reginfo, lt->reginfo.rp->primary);	/* Check for incompatible automatic deadlock detection requests. */	if (dbenv->lk_detect != DB_LOCK_NORUN) {		if (region->detect != DB_LOCK_NORUN &&		    dbenv->lk_detect != DB_LOCK_DEFAULT &&		    region->detect != dbenv->lk_detect) {			__db_err(dbenv,		    "lock_open: incompatible deadlock detector mode");			ret = EINVAL;			goto err;		}		/*		 * Upgrade if our caller wants automatic detection, and it		 * was not currently being done, whether or not we created		 * the region.		 */		if (region->detect == DB_LOCK_NORUN)			region->detect = dbenv->lk_detect;	}	/*	 * A process joining the region may have reset the lock and transaction	 * timeouts.	 */	 if (dbenv->lk_timeout != 0)		region->lk_timeout = dbenv->lk_timeout;	 if (dbenv->tx_timeout != 0)		region->tx_timeout = dbenv->tx_timeout;	/* Set remaining pointers into region. */	lt->conflicts = (u_int8_t *)R_ADDR(&lt->reginfo, region->conf_off);	lt->obj_tab = (DB_HASHTAB *)R_ADDR(&lt->reginfo, region->obj_off);	lt->locker_tab = (DB_HASHTAB *)R_ADDR(&lt->reginfo, region->locker_off);	R_UNLOCK(dbenv, &lt->reginfo);	dbenv->lk_handle = lt;	return (0);err:	if (lt->reginfo.addr != NULL) {		if (F_ISSET(&lt->reginfo, REGION_CREATE))			ret = __db_panic(dbenv, ret);		R_UNLOCK(dbenv, &lt->reginfo);		(void)__db_r_detach(dbenv, &lt->reginfo, 0);	}	__os_free(dbenv, lt);	return (ret);}/* * __lock_init -- *	Initialize the lock region. */static int__lock_init(dbenv, lt)	DB_ENV *dbenv;	DB_LOCKTAB *lt;{	const u_int8_t *lk_conflicts;	struct __db_lock *lp;	DB_LOCKER *lidp;	DB_LOCKOBJ *op;	DB_LOCKREGION *region;#ifdef HAVE_MUTEX_SYSTEM_RESOURCES	size_t maint_size;#endif	u_int32_t i, lk_modes;	u_int8_t *addr;	int ret;	if ((ret = __db_shalloc(lt->reginfo.addr,	    sizeof(DB_LOCKREGION), 0, &lt->reginfo.primary)) != 0)		goto mem_err;	lt->reginfo.rp->primary = R_OFFSET(&lt->reginfo, lt->reginfo.primary);	region = lt->reginfo.primary;	memset(region, 0, sizeof(*region));	/* Select a conflict matrix if none specified. */	if (dbenv->lk_modes == 0)		if (CDB_LOCKING(dbenv)) {			lk_modes = DB_LOCK_CDB_N;			lk_conflicts = db_cdb_conflicts;		} else {			lk_modes = DB_LOCK_RIW_N;			lk_conflicts = db_riw_conflicts;		}	else {		lk_modes = dbenv->lk_modes;		lk_conflicts = dbenv->lk_conflicts;	}	region->need_dd = 0;	region->detect = DB_LOCK_NORUN;	region->lk_timeout = dbenv->lk_timeout;	region->tx_timeout = dbenv->tx_timeout;	region->locker_t_size = __db_tablesize(dbenv->lk_max_lockers);	region->object_t_size = __db_tablesize(dbenv->lk_max_objects);	memset(&region->stat, 0, sizeof(region->stat));	region->stat.st_id = 0;	region->stat.st_cur_maxid = DB_LOCK_MAXID;	region->stat.st_maxlocks = dbenv->lk_max;	region->stat.st_maxlockers = dbenv->lk_max_lockers;	region->stat.st_maxobjects = dbenv->lk_max_objects;	region->stat.st_nmodes = lk_modes;	/* Allocate room for the conflict matrix and initialize it. */	if ((ret =	    __db_shalloc(lt->reginfo.addr, lk_modes * lk_modes, 0, &addr)) != 0)		goto mem_err;	memcpy(addr, lk_conflicts, lk_modes * lk_modes);	region->conf_off = R_OFFSET(&lt->reginfo, addr);	/* Allocate room for the object hash table and initialize it. */	if ((ret = __db_shalloc(lt->reginfo.addr,	    region->object_t_size * sizeof(DB_HASHTAB), 0, &addr)) != 0)		goto mem_err;	__db_hashinit(addr, region->object_t_size);	region->obj_off = R_OFFSET(&lt->reginfo, addr);	/* Allocate room for the locker hash table and initialize it. */	if ((ret = __db_shalloc(lt->reginfo.addr,	    region->locker_t_size * sizeof(DB_HASHTAB), 0, &addr)) != 0)		goto mem_err;	__db_hashinit(addr, region->locker_t_size);	region->locker_off = R_OFFSET(&lt->reginfo, addr);#ifdef	HAVE_MUTEX_SYSTEM_RESOURCES	maint_size = __lock_region_maint(dbenv);	/* Allocate room for the locker maintenance info and initialize it. */	if ((ret = __db_shalloc(lt->reginfo.addr,	    sizeof(REGMAINT) + maint_size, 0, &addr)) != 0)		goto mem_err;	__db_maintinit(&lt->reginfo, addr, maint_size);	region->maint_off = R_OFFSET(&lt->reginfo, addr);#endif	/*	 * Initialize locks onto a free list. Initialize and lock the mutex	 * so that when we need to block, all we need do is try to acquire	 * the mutex.	 */	SH_TAILQ_INIT(&region->free_locks);	for (i = 0; i < region->stat.st_maxlocks; ++i) {		if ((ret = __db_shalloc(lt->reginfo.addr,		    sizeof(struct __db_lock), MUTEX_ALIGN, &lp)) != 0)			goto mem_err;		lp->status = DB_LSTAT_FREE;		lp->gen = 0;		if ((ret = __db_mutex_setup(dbenv, &lt->reginfo, &lp->mutex,		    MUTEX_NO_RLOCK | MUTEX_SELF_BLOCK)) != 0)			return (ret);		MUTEX_LOCK(dbenv, &lp->mutex);		SH_TAILQ_INSERT_HEAD(&region->free_locks, lp, links, __db_lock);	}	/* Initialize objects onto a free list.  */	SH_TAILQ_INIT(&region->dd_objs);	SH_TAILQ_INIT(&region->free_objs);	for (i = 0; i < region->stat.st_maxobjects; ++i) {		if ((ret = __db_shalloc(lt->reginfo.addr,		    sizeof(DB_LOCKOBJ), 0, &op)) != 0)			goto mem_err;		SH_TAILQ_INSERT_HEAD(		    &region->free_objs, op, links, __db_lockobj);	}	/* Initialize lockers onto a free list.  */	SH_TAILQ_INIT(&region->lockers);	SH_TAILQ_INIT(&region->free_lockers);	for (i = 0; i < region->stat.st_maxlockers; ++i) {		if ((ret = __db_shalloc(lt->reginfo.addr,		    sizeof(DB_LOCKER), 0, &lidp)) != 0) {mem_err:		__db_err(dbenv,			    "Unable to allocate memory for the lock table");			return (ret);		}		SH_TAILQ_INSERT_HEAD(		    &region->free_lockers, lidp, links, __db_locker);	}	return (0);}/* * __lock_dbenv_refresh -- *	Clean up after the lock system on a close or failed open.  Called * only from __dbenv_refresh.  (Formerly called __lock_close.) * * PUBLIC: int __lock_dbenv_refresh __P((DB_ENV *)); */int__lock_dbenv_refresh(dbenv)	DB_ENV *dbenv;{	DB_LOCKTAB *lt;	int ret;	lt = dbenv->lk_handle;	/* Detach from the region. */	ret = __db_r_detach(dbenv, &lt->reginfo, 0);	__os_free(dbenv, lt);	dbenv->lk_handle = NULL;	return (ret);}/* * __lock_region_size -- *	Return the region size. */static size_t__lock_region_size(dbenv)	DB_ENV *dbenv;{	size_t retval;	/*	 * Figure out how much space we're going to need.  This list should	 * map one-to-one with the __db_shalloc calls in __lock_init.	 */	retval = 0;	retval += __db_shalloc_size(sizeof(DB_LOCKREGION), 1);	retval += __db_shalloc_size(dbenv->lk_modes * dbenv->lk_modes, 1);	retval += __db_shalloc_size(	    __db_tablesize(dbenv->lk_max_lockers) * (sizeof(DB_HASHTAB)), 1);	retval += __db_shalloc_size(	    __db_tablesize(dbenv->lk_max_objects) * (sizeof(DB_HASHTAB)), 1);#ifdef HAVE_MUTEX_SYSTEM_RESOURCES	retval +=	    __db_shalloc_size(sizeof(REGMAINT) + __lock_region_maint(dbenv), 1);#endif	retval += __db_shalloc_size(	    sizeof(struct __db_lock), MUTEX_ALIGN) * dbenv->lk_max;	retval += __db_shalloc_size(	    sizeof(DB_LOCKOBJ), 1) * dbenv->lk_max_objects;	retval += __db_shalloc_size(	    sizeof(DB_LOCKER), 1) * dbenv->lk_max_lockers;	/*	 * Include 16 bytes of string space per lock.  DB doesn't use it	 * because we pre-allocate lock space for DBTs in the structure.	 */	retval += __db_shalloc_size(dbenv->lk_max * 16, sizeof(size_t));	/* And we keep getting this wrong, let's be generous. */	retval += retval / 4;	return (retval);}#ifdef HAVE_MUTEX_SYSTEM_RESOURCES/* * __lock_region_maint -- *	Return the amount of space needed for region maintenance info. */static size_t__lock_region_maint(dbenv)	DB_ENV *dbenv;{	size_t s;	s = sizeof(DB_MUTEX *) * dbenv->lk_max;	return (s);}#endif/* * __lock_region_destroy *	Destroy any region maintenance info. * * PUBLIC: void __lock_region_destroy __P((DB_ENV *, REGINFO *)); */void__lock_region_destroy(dbenv, infop)	DB_ENV *dbenv;	REGINFO *infop;{	__db_shlocks_destroy(infop, (REGMAINT *)R_ADDR(infop,	    ((DB_LOCKREGION *)R_ADDR(infop, infop->rp->primary))->maint_off));	COMPQUIET(dbenv, NULL);	COMPQUIET(infop, NULL);}#ifdef CONFIG_TEST/* * __lock_id_set -- *	Set the current locker ID and current maximum unused ID (for *	testing purposes only). * * PUBLIC: int __lock_id_set __P((DB_ENV *, u_int32_t, u_int32_t)); */int__lock_id_set(dbenv, cur_id, max_id)	DB_ENV *dbenv;	u_int32_t cur_id, max_id;{	DB_LOCKTAB *lt;	DB_LOCKREGION *region;	ENV_REQUIRES_CONFIG(dbenv,	    dbenv->lk_handle, "lock_id_set", DB_INIT_LOCK);	lt = dbenv->lk_handle;	region = lt->reginfo.primary;	region->stat.st_id = cur_id;	region->stat.st_cur_maxid = max_id;	return (0);}#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
无码av中文一区二区三区桃花岛| 99久久精品免费精品国产| 久久综合五月天婷婷伊人| 91亚洲精华国产精华精华液| 青青草精品视频| 亚洲黄色免费网站| 精品影视av免费| 亚洲综合在线五月| 国产精品视频第一区| 91精品国产欧美一区二区18| 国产91富婆露脸刺激对白| 毛片av一区二区| 亚洲成人自拍一区| 亚洲精品视频免费看| 国产欧美精品区一区二区三区| 国产在线视视频有精品| 亚洲第一主播视频| 一区二区三区在线免费视频| 26uuu欧美| 777色狠狠一区二区三区| 在线精品视频一区二区| 成人白浆超碰人人人人| 国产一区二区在线电影| 日韩精品色哟哟| 亚洲国产一区二区三区| 亚洲男人的天堂网| 国产精品成人一区二区艾草| 国产性做久久久久久| 精品欧美乱码久久久久久| 91精品啪在线观看国产60岁| 欧美性欧美巨大黑白大战| 色综合久久综合| 91麻豆成人久久精品二区三区| 亚洲成人自拍网| 亚州成人在线电影| 亚洲高清免费在线| 日韩制服丝袜先锋影音| 亚洲午夜久久久| 同产精品九九九| 日本视频一区二区| 精品一区二区三区在线观看国产| 欧美高清在线视频| 久久精品男人天堂av| 欧美激情一区在线| 综合激情成人伊人| 一区二区视频在线| 亚洲靠逼com| 亚洲一二三专区| 午夜欧美在线一二页| 日产精品久久久久久久性色| 奇米影视7777精品一区二区| 免费日韩伦理电影| 国产在线不卡一区| 国产一区二区免费看| 国产二区国产一区在线观看| 激情综合色综合久久| 国产麻豆精品视频| 成人av小说网| 欧美最猛性xxxxx直播| 欧美精品久久久久久久久老牛影院 | 91久久精品国产91性色tv| av影院午夜一区| 亚洲一区二区高清| 欧美电影免费提供在线观看| 久久精品欧美日韩精品| 亚洲欧美一区二区三区久本道91 | 日本三级亚洲精品| 乱中年女人伦av一区二区| 国产成人av电影在线观看| 99精品一区二区| 7777精品伊人久久久大香线蕉超级流畅| 成人av小说网| 欧美日韩不卡在线| 精品不卡在线视频| 自拍偷拍亚洲欧美日韩| 三级一区在线视频先锋| 国产精品一区一区三区| 色av一区二区| 亚洲精品一区二区精华| 中文字幕av一区 二区| 一级女性全黄久久生活片免费| 国产精品视频一二| 亚洲一区二区三区激情| 国产伦精品一区二区三区视频青涩 | 国产欧美日韩激情| 亚洲最色的网站| 国产九色sp调教91| 欧美日韩精品一区二区三区蜜桃| 91黄色激情网站| 久久久午夜精品理论片中文字幕| 精品成人佐山爱一区二区| 国产精品国产自产拍高清av | 国产亚洲精品aa| 亚洲成人av资源| www.综合网.com| 日韩三级中文字幕| 一区二区三区不卡视频| 国产主播一区二区三区| 欧美酷刑日本凌虐凌虐| 国产精品久久久久永久免费观看 | 爽好多水快深点欧美视频| 国产成人av在线影院| 91精品欧美综合在线观看最新| 欧美日韩高清一区二区| 亚洲欧洲av另类| 国产在线观看免费一区| 欧美日韩国产精品成人| 国产精品大尺度| 国产精品一区不卡| 精品国产污污免费网站入口 | 在线成人高清不卡| 亚洲三级视频在线观看| 国产精品资源网站| 欧美tk丨vk视频| 日韩av成人高清| 亚洲电影一级黄| 97se亚洲国产综合自在线观| 欧美成人三级电影在线| 日韩福利电影在线| 欧美日韩国产经典色站一区二区三区| 欧美精品1区2区3区| 樱桃国产成人精品视频| 北岛玲一区二区三区四区| 久久久精品天堂| 国产在线国偷精品产拍免费yy| 波多野结衣中文字幕一区二区三区| 99久久精品国产一区二区三区| 欧美网站一区二区| 亚洲午夜一二三区视频| 一本到高清视频免费精品| 亚洲欧洲日韩综合一区二区| 粉嫩一区二区三区性色av| 国产亚洲欧美中文| 国产毛片精品视频| 中文字幕高清一区| 成人黄色777网| 最新国产成人在线观看| 99re热这里只有精品免费视频| 欧美日韩一区视频| 日韩高清欧美激情| 日韩午夜激情免费电影| 六月丁香综合在线视频| 欧美一区二区大片| 精品无人码麻豆乱码1区2区 | 国产麻豆精品视频| 国产精品视频一区二区三区不卡| 亚洲国产综合视频在线观看| 欧美性色黄大片| 五月天欧美精品| 日韩片之四级片| 国产精品白丝av| 国产精品久久久久久妇女6080| 日韩综合一区二区| 欧美精品一区二区三区视频| 国产精品一区久久久久| 综合中文字幕亚洲| 欧美三级韩国三级日本三斤| 日韩av网站在线观看| 久久综合成人精品亚洲另类欧美| 一区二区三区四区在线免费观看 | 色妞www精品视频| 亚洲国产成人va在线观看天堂| 国产福利一区在线| 亚洲精品中文字幕在线观看| 欧美在线你懂得| 激情图区综合网| 18成人在线观看| 制服丝袜日韩国产| 国产乱码精品一区二区三区av| 欧美高清一级片在线| 国内久久精品视频| 亚洲精品视频在线| 欧美www视频| 91色乱码一区二区三区| 日韩成人午夜电影| 国产精品久久久久久亚洲毛片| 激情都市一区二区| 亚洲日本一区二区三区| 日韩一区二区在线看片| 成人高清免费在线播放| 亚洲影院理伦片| 久久久精品国产99久久精品芒果| 韩国女主播一区二区三区| 亚洲国产成人av| 国产欧美精品在线观看| 在线不卡免费欧美| 成人动漫一区二区在线| 亚洲成人激情av| 亚洲欧美在线另类| 2019国产精品| 欧美一区二区三区四区高清| 99久久久国产精品免费蜜臀| 久久99久久久欧美国产| 夜夜精品浪潮av一区二区三区| 91成人国产精品| 成人免费视频一区| 免费观看久久久4p| 亚洲国产精品久久人人爱| 国产精品免费视频一区| 欧美xxxxx牲另类人与|