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

📄 db_server_proc.c

📁 linux 下的源代码分析阅读器 red hat公司新版
💻 C
📖 第 1 页 / 共 5 页
字号:
/*- * See the file LICENSE for redistribution information. * * Copyright (c) 2000,2007 Oracle.  All rights reserved. * * $Id: db_server_proc.c,v 12.22 2007/06/28 13:59:24 bostic Exp $ */#include "db_config.h"#include "db_int.h"#ifdef HAVE_SYSTEM_INCLUDE_FILES#include <rpc/rpc.h>#endif#include "db_server.h"#include "dbinc/db_server_int.h"#include "dbinc_auto/rpc_server_ext.h"/* * PUBLIC: void __env_get_cachesize_proc __P((u_int, * PUBLIC:      __env_get_cachesize_reply *)); */void__env_get_cachesize_proc(dbenvcl_id, replyp)	u_int dbenvcl_id;	__env_get_cachesize_reply *replyp;{	DB_ENV *dbenv;	ct_entry *dbenv_ctp;	ACTIVATE_CTP(dbenv_ctp, dbenvcl_id, CT_ENV);	dbenv = (DB_ENV *)dbenv_ctp->ct_anyp;	replyp->status = dbenv->get_cachesize(dbenv, &replyp->gbytes,	    &replyp->bytes, (int *)&replyp->ncache);}/* * PUBLIC: void __env_set_cachesize_proc __P((u_int, u_int32_t, u_int32_t, * PUBLIC:      u_int32_t, __env_set_cachesize_reply *)); */void__env_set_cachesize_proc(dbenvcl_id, gbytes, bytes, ncache, replyp)	u_int dbenvcl_id;	u_int32_t gbytes;	u_int32_t bytes;	u_int32_t ncache;	__env_set_cachesize_reply *replyp;{	DB_ENV *dbenv;	ct_entry *dbenv_ctp;	int ret;	ACTIVATE_CTP(dbenv_ctp, dbenvcl_id, CT_ENV);	dbenv = (DB_ENV *)dbenv_ctp->ct_anyp;	ret = dbenv->set_cachesize(dbenv, gbytes, bytes, ncache);	replyp->status = ret;	return;}/* * PUBLIC: void __env_cdsgroup_begin_proc __P((u_int, * PUBLIC:      __env_cdsgroup_begin_reply *)); */void__env_cdsgroup_begin_proc(dbenvcl_id, replyp)	u_int dbenvcl_id;	__env_cdsgroup_begin_reply *replyp;{	DB_ENV *dbenv;	DB_TXN *txnp;	ct_entry *ctp, *dbenv_ctp;	int ret;	ACTIVATE_CTP(dbenv_ctp, dbenvcl_id, CT_ENV);	dbenv = (DB_ENV *)dbenv_ctp->ct_anyp;	ctp = new_ct_ent(&replyp->status);	if (ctp == NULL)		return;	ret = dbenv->cdsgroup_begin(dbenv, &txnp);	if (ret == 0) {		ctp->ct_txnp = txnp;		ctp->ct_type = CT_TXN;		ctp->ct_parent = NULL;		ctp->ct_envparent = dbenv_ctp;		replyp->txnidcl_id = ctp->ct_id;		__dbsrv_settimeout(ctp, dbenv_ctp->ct_timeout);		__dbsrv_active(ctp);	} else		__dbclear_ctp(ctp);	replyp->status = ret;	return;}/* * PUBLIC: void __env_close_proc __P((u_int, u_int32_t, __env_close_reply *)); */void__env_close_proc(dbenvcl_id, flags, replyp)	u_int dbenvcl_id;	u_int32_t flags;	__env_close_reply *replyp;{	ct_entry *dbenv_ctp;	ACTIVATE_CTP(dbenv_ctp, dbenvcl_id, CT_ENV);	replyp->status = __env_close_int(dbenvcl_id, flags, 0);	return;}/* * PUBLIC: void __env_create_proc __P((u_int32_t, __env_create_reply *)); */void__env_create_proc(timeout, replyp)	u_int32_t timeout;	__env_create_reply *replyp;{	DB_ENV *dbenv;	ct_entry *ctp;	int ret;	ctp = new_ct_ent(&replyp->status);	if (ctp == NULL)		return;	if ((ret = db_env_create(&dbenv, 0)) == 0) {		ctp->ct_envp = dbenv;		ctp->ct_type = CT_ENV;		ctp->ct_parent = NULL;		ctp->ct_envparent = ctp;		__dbsrv_settimeout(ctp, timeout);		__dbsrv_active(ctp);		replyp->envcl_id = ctp->ct_id;	} else		__dbclear_ctp(ctp);	replyp->status = ret;	return;}/* * PUBLIC: void __env_dbremove_proc __P((u_int, u_int, char *, char *, * PUBLIC:	u_int32_t, __env_dbremove_reply *)); */void__env_dbremove_proc(dbenvcl_id, txnpcl_id, name, subdb, flags, replyp)	u_int dbenvcl_id;	u_int txnpcl_id;	char *name;	char *subdb;	u_int32_t flags;	__env_dbremove_reply *replyp;{	int ret;	DB_ENV * dbenv;	ct_entry *dbenv_ctp;	DB_TXN * txnp;	ct_entry *txnp_ctp;	ACTIVATE_CTP(dbenv_ctp, dbenvcl_id, CT_ENV);	dbenv = (DB_ENV *)dbenv_ctp->ct_anyp;	if (txnpcl_id != 0) {		ACTIVATE_CTP(txnp_ctp, txnpcl_id, CT_TXN);		txnp = (DB_TXN *)txnp_ctp->ct_anyp;	} else		txnp = NULL;	ret = dbenv->dbremove(dbenv, txnp, name, subdb, flags);	replyp->status = ret;	return;}/* * PUBLIC: void __env_dbrename_proc __P((u_int, u_int, char *, char *, char *, * PUBLIC:      u_int32_t, __env_dbrename_reply *)); */void__env_dbrename_proc(dbenvcl_id, txnpcl_id, name, subdb, newname, flags, replyp)	u_int dbenvcl_id;	u_int txnpcl_id;	char *name;	char *subdb;	char *newname;	u_int32_t flags;	__env_dbrename_reply *replyp;{	int ret;	DB_ENV * dbenv;	ct_entry *dbenv_ctp;	DB_TXN * txnp;	ct_entry *txnp_ctp;	ACTIVATE_CTP(dbenv_ctp, dbenvcl_id, CT_ENV);	dbenv = (DB_ENV *)dbenv_ctp->ct_anyp;	if (txnpcl_id != 0) {		ACTIVATE_CTP(txnp_ctp, txnpcl_id, CT_TXN);		txnp = (DB_TXN *)txnp_ctp->ct_anyp;	} else		txnp = NULL;	ret = dbenv->dbrename(dbenv, txnp, name, subdb, newname, flags);	replyp->status = ret;	return;}/* * PUBLIC: void __env_get_encrypt_flags_proc __P((u_int, * PUBLIC:      __env_get_encrypt_flags_reply *)); */void__env_get_encrypt_flags_proc(dbenvcl_id, replyp)	u_int dbenvcl_id;	__env_get_encrypt_flags_reply *replyp;{	DB_ENV *dbenv;	ct_entry *dbenv_ctp;	ACTIVATE_CTP(dbenv_ctp, dbenvcl_id, CT_ENV);	dbenv = (DB_ENV *)dbenv_ctp->ct_anyp;	replyp->status = dbenv->get_encrypt_flags(dbenv, &replyp->flags);}/* * PUBLIC: void __env_set_encrypt_proc __P((u_int, char *, u_int32_t, * PUBLIC:      __env_set_encrypt_reply *)); */void__env_set_encrypt_proc(dbenvcl_id, passwd, flags, replyp)	u_int dbenvcl_id;	char *passwd;	u_int32_t flags;	__env_set_encrypt_reply *replyp;{	int ret;	DB_ENV * dbenv;	ct_entry *dbenv_ctp;	ACTIVATE_CTP(dbenv_ctp, dbenvcl_id, CT_ENV);	dbenv = (DB_ENV *)dbenv_ctp->ct_anyp;	ret = dbenv->set_encrypt(dbenv, passwd, flags);	replyp->status = ret;	return;}/* * PUBLIC: void __env_get_flags_proc __P((u_int, __env_get_flags_reply *)); */void__env_get_flags_proc(dbenvcl_id, replyp)	u_int dbenvcl_id;	__env_get_flags_reply *replyp;{	DB_ENV *dbenv;	ct_entry *dbenv_ctp;	ACTIVATE_CTP(dbenv_ctp, dbenvcl_id, CT_ENV);	dbenv = (DB_ENV *)dbenv_ctp->ct_anyp;	replyp->status = dbenv->get_flags(dbenv, &replyp->flags);}/* * PUBLIC: void __env_set_flags_proc __P((u_int, u_int32_t, u_int32_t, * PUBLIC:      __env_set_flags_reply *)); */void__env_set_flags_proc(dbenvcl_id, flags, onoff, replyp)	u_int dbenvcl_id;	u_int32_t flags;	u_int32_t onoff;	__env_set_flags_reply *replyp;{	DB_ENV *dbenv;	ct_entry *dbenv_ctp;	int ret;	ACTIVATE_CTP(dbenv_ctp, dbenvcl_id, CT_ENV);	dbenv = (DB_ENV *)dbenv_ctp->ct_anyp;	ret = dbenv->set_flags(dbenv, flags, onoff);	if (onoff)		dbenv_ctp->ct_envdp.onflags = flags;	else		dbenv_ctp->ct_envdp.offflags = flags;	replyp->status = ret;	return;}/* * PUBLIC: void __env_get_home_proc __P((u_int, __env_get_home_reply *)); */void__env_get_home_proc(dbenvcl_id, replyp)	u_int dbenvcl_id;	__env_get_home_reply *replyp;{	DB_ENV *dbenv;	ct_entry *dbenv_ctp;	ACTIVATE_CTP(dbenv_ctp, dbenvcl_id, CT_ENV);	dbenv = (DB_ENV *)dbenv_ctp->ct_anyp;	replyp->status = dbenv->get_home(dbenv,	    (const char **)&replyp->home);}/* * PUBLIC: void __env_get_open_flags_proc __P((u_int, * PUBLIC:      __env_get_open_flags_reply *)); */void__env_get_open_flags_proc(dbenvcl_id, replyp)	u_int dbenvcl_id;	__env_get_open_flags_reply *replyp;{	DB_ENV *dbenv;	ct_entry *dbenv_ctp;	ACTIVATE_CTP(dbenv_ctp, dbenvcl_id, CT_ENV);	dbenv = (DB_ENV *)dbenv_ctp->ct_anyp;	replyp->status = dbenv->get_open_flags(dbenv, &replyp->flags);}/* * PUBLIC: void __env_open_proc __P((u_int, char *, u_int32_t, u_int32_t, * PUBLIC:      __env_open_reply *)); */void__env_open_proc(dbenvcl_id, home, flags, mode, replyp)	u_int dbenvcl_id;	char *home;	u_int32_t flags;	u_int32_t mode;	__env_open_reply *replyp;{	DB_ENV *dbenv;	ct_entry *dbenv_ctp, *new_ctp;	u_int32_t newflags, shareflags;	int ret;	home_entry *fullhome;	ACTIVATE_CTP(dbenv_ctp, dbenvcl_id, CT_ENV);	dbenv = (DB_ENV *)dbenv_ctp->ct_anyp;	fullhome = get_fullhome(home);	if (fullhome == NULL) {		ret = DB_NOSERVER_HOME;		goto out;	}	/*	 * If they are using locking do deadlock detection for them,	 * internally.	 */	if ((flags & DB_INIT_LOCK) &&	    (ret = dbenv->set_lk_detect(dbenv, DB_LOCK_DEFAULT)) != 0)		goto out;	if (__dbsrv_verbose) {		dbenv->set_errfile(dbenv, stderr);		dbenv->set_errpfx(dbenv, fullhome->home);	} else		dbenv->set_errfile(dbenv, NULL);	/*	 * Mask off flags we ignore	 */	newflags = (flags & ~DB_SERVER_FLAGMASK);	shareflags = (newflags & DB_SERVER_ENVFLAGS);	/*	 * Check now whether we can share a handle for this env.	 */	replyp->envcl_id = dbenvcl_id;	if ((new_ctp = __dbsrv_shareenv(dbenv_ctp, fullhome, shareflags))	    != NULL) {		/*		 * We can share, clean up old  ID, set new one.		 */		if (__dbsrv_verbose)			printf("Sharing env ID %ld\n", new_ctp->ct_id);		replyp->envcl_id = new_ctp->ct_id;		ret = __env_close_int(dbenvcl_id, 0, 0);	} else {		ret = dbenv->open(dbenv, fullhome->home, newflags, mode);		dbenv_ctp->ct_envdp.home = fullhome;		dbenv_ctp->ct_envdp.envflags = shareflags;	}out:	replyp->status = ret;	return;}/* * PUBLIC: void __env_remove_proc __P((u_int, char *, u_int32_t, * PUBLIC:      __env_remove_reply *)); */void__env_remove_proc(dbenvcl_id, home, flags, replyp)	u_int dbenvcl_id;	char *home;	u_int32_t flags;	__env_remove_reply *replyp;{	DB_ENV *dbenv;	ct_entry *dbenv_ctp;	int ret;	home_entry *fullhome;	ACTIVATE_CTP(dbenv_ctp, dbenvcl_id, CT_ENV);	dbenv = (DB_ENV *)dbenv_ctp->ct_anyp;	fullhome = get_fullhome(home);	if (fullhome == NULL) {		replyp->status = DB_NOSERVER_HOME;		return;	}	ret = dbenv->remove(dbenv, fullhome->home, flags);	__dbdel_ctp(dbenv_ctp);	replyp->status = ret;	return;}/* * PUBLIC: void __txn_abort_proc __P((u_int, __txn_abort_reply *)); */void__txn_abort_proc(txnpcl_id, replyp)	u_int txnpcl_id;	__txn_abort_reply *replyp;{	DB_TXN *txnp;	ct_entry *txnp_ctp;	int ret;	ACTIVATE_CTP(txnp_ctp, txnpcl_id, CT_TXN);	txnp = (DB_TXN *)txnp_ctp->ct_anyp;	ret = txnp->abort(txnp);	__dbdel_ctp(txnp_ctp);	replyp->status = ret;	return;}/* * PUBLIC: void __env_txn_begin_proc __P((u_int, u_int, u_int32_t, * PUBLIC:      __env_txn_begin_reply *)); */void__env_txn_begin_proc(dbenvcl_id, parentcl_id, flags, replyp)	u_int dbenvcl_id;	u_int parentcl_id;	u_int32_t flags;	__env_txn_begin_reply *replyp;{	DB_ENV *dbenv;	DB_TXN *parent, *txnp;	ct_entry *ctp, *dbenv_ctp, *parent_ctp;	int ret;	ACTIVATE_CTP(dbenv_ctp, dbenvcl_id, CT_ENV);	dbenv = (DB_ENV *)dbenv_ctp->ct_anyp;	parent_ctp = NULL;	ctp = new_ct_ent(&replyp->status);	if (ctp == NULL)		return;	if (parentcl_id != 0) {		ACTIVATE_CTP(parent_ctp, parentcl_id, CT_TXN);		parent = (DB_TXN *)parent_ctp->ct_anyp;		ctp->ct_activep = parent_ctp->ct_activep;	} else		parent = NULL;	/*	 * Need to set DB_TXN_NOWAIT or the RPC server may deadlock	 * itself and no one can break the lock.	 */	ret = dbenv->txn_begin(dbenv, parent, &txnp, flags | DB_TXN_NOWAIT);	if (ret == 0) {		ctp->ct_txnp = txnp;		ctp->ct_type = CT_TXN;		ctp->ct_parent = parent_ctp;		ctp->ct_envparent = dbenv_ctp;		replyp->txnidcl_id = ctp->ct_id;		__dbsrv_settimeout(ctp, dbenv_ctp->ct_timeout);		__dbsrv_active(ctp);	} else		__dbclear_ctp(ctp);	replyp->status = ret;	return;}/* * PUBLIC: void __txn_commit_proc __P((u_int, u_int32_t, * PUBLIC:      __txn_commit_reply *)); */void__txn_commit_proc(txnpcl_id, flags, replyp)	u_int txnpcl_id;	u_int32_t flags;	__txn_commit_reply *replyp;{	DB_TXN *txnp;	ct_entry *txnp_ctp;	int ret;	ACTIVATE_CTP(txnp_ctp, txnpcl_id, CT_TXN);	txnp = (DB_TXN *)txnp_ctp->ct_anyp;	ret = txnp->commit(txnp, flags);	__dbdel_ctp(txnp_ctp);	replyp->status = ret;	return;}/* * PUBLIC: void __txn_discard_proc __P((u_int, u_int32_t, * PUBLIC:      __txn_discard_reply *)); */void__txn_discard_proc(txnpcl_id, flags, replyp)	u_int txnpcl_id;	u_int32_t flags;	__txn_discard_reply *replyp;{	DB_TXN *txnp;	ct_entry *txnp_ctp;	int ret;	ACTIVATE_CTP(txnp_ctp, txnpcl_id, CT_TXN);	txnp = (DB_TXN *)txnp_ctp->ct_anyp;	ret = txnp->discard(txnp, flags);	__dbdel_ctp(txnp_ctp);	replyp->status = ret;	return;}

⌨️ 快捷键说明

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