xa_db.c revision 1
11dea2cb49f8dfbd12424d677ab779a25d453b2aJnRouvignac/*-
11dea2cb49f8dfbd12424d677ab779a25d453b2aJnRouvignac * See the file LICENSE for redistribution information.
11dea2cb49f8dfbd12424d677ab779a25d453b2aJnRouvignac *
11dea2cb49f8dfbd12424d677ab779a25d453b2aJnRouvignac * Copyright (c) 1998
11dea2cb49f8dfbd12424d677ab779a25d453b2aJnRouvignac * Sleepycat Software. All rights reserved.
11dea2cb49f8dfbd12424d677ab779a25d453b2aJnRouvignac */
11dea2cb49f8dfbd12424d677ab779a25d453b2aJnRouvignac
11dea2cb49f8dfbd12424d677ab779a25d453b2aJnRouvignac#pragma ident "%Z%%M% %I% %E% SMI"
8cf870d281dc8c242f083d14dfef05f24aa5fceeJnRouvignac
8cf870d281dc8c242f083d14dfef05f24aa5fceeJnRouvignac#include "config.h"
11dea2cb49f8dfbd12424d677ab779a25d453b2aJnRouvignac
11dea2cb49f8dfbd12424d677ab779a25d453b2aJnRouvignac#ifndef lint
11dea2cb49f8dfbd12424d677ab779a25d453b2aJnRouvignacstatic const char sccsid[] = "@(#)xa_db.c 10.6 (Sleepycat) 12/19/98";
11dea2cb49f8dfbd12424d677ab779a25d453b2aJnRouvignac#endif /* not lint */
8cf870d281dc8c242f083d14dfef05f24aa5fceeJnRouvignac
8cf870d281dc8c242f083d14dfef05f24aa5fceeJnRouvignac#ifndef NO_SYSTEM_INCLUDES
8cf870d281dc8c242f083d14dfef05f24aa5fceeJnRouvignac#include <sys/types.h>
8cf870d281dc8c242f083d14dfef05f24aa5fceeJnRouvignac
11dea2cb49f8dfbd12424d677ab779a25d453b2aJnRouvignac#include <errno.h>
11dea2cb49f8dfbd12424d677ab779a25d453b2aJnRouvignac#include <stdio.h>
11dea2cb49f8dfbd12424d677ab779a25d453b2aJnRouvignac#include <string.h>
11dea2cb49f8dfbd12424d677ab779a25d453b2aJnRouvignac#endif
11dea2cb49f8dfbd12424d677ab779a25d453b2aJnRouvignac
11dea2cb49f8dfbd12424d677ab779a25d453b2aJnRouvignac#include "db_int.h"
11dea2cb49f8dfbd12424d677ab779a25d453b2aJnRouvignac#include "db_page.h"
11dea2cb49f8dfbd12424d677ab779a25d453b2aJnRouvignac#include "xa.h"
11dea2cb49f8dfbd12424d677ab779a25d453b2aJnRouvignac#include "xa_ext.h"
ffed21ea1367f7df34a44909e87d2329b548f16dJnRouvignac#include "db_am.h"
11dea2cb49f8dfbd12424d677ab779a25d453b2aJnRouvignac#include "db_ext.h"
fe8760a025521d2223b4e0f7b972a3262673b188JnRouvignac#include "common_ext.h"
084bd019cee0fc133a55069326a7c3bd204aa936JnRouvignac
4a7f0ad21d4c6a48235ffd7f7f4610315212d0e6JnRouvignacstatic int __xa_c_close __P((DBC *));
11dea2cb49f8dfbd12424d677ab779a25d453b2aJnRouvignacstatic int __xa_c_del __P((DBC *, u_int32_t));
11dea2cb49f8dfbd12424d677ab779a25d453b2aJnRouvignacstatic int __xa_c_get __P((DBC *, DBT *, DBT *, u_int32_t));
32a5083e32925d98e03a79d5026ba26d176d0f62JnRouvignacstatic int __xa_c_put __P((DBC *, DBT *, DBT *, u_int32_t));
4a7f0ad21d4c6a48235ffd7f7f4610315212d0e6JnRouvignacstatic int __xa_close __P((DB *, u_int32_t));
4a7f0ad21d4c6a48235ffd7f7f4610315212d0e6JnRouvignacstatic int __xa_cursor __P((DB *, DB_TXN *, DBC **, u_int32_t));
943106fcb6a2100c9bdd2e044e454b7d2a2e900aJnRouvignacstatic int __xa_del __P((DB *, DB_TXN *, DBT *, u_int32_t));
11dea2cb49f8dfbd12424d677ab779a25d453b2aJnRouvignacstatic int __xa_fd __P((DB *, int *));
13435a3727f5d58028108ab9dfdde0b4014998b5JnRouvignacstatic int __xa_get __P((DB *, DB_TXN *, DBT *, DBT *, u_int32_t));
2aa4baaaad626108d109989d725d14fa559d3052ludostatic int __xa_put __P((DB *, DB_TXN *, DBT *, DBT *, u_int32_t));
32a5083e32925d98e03a79d5026ba26d176d0f62JnRouvignacstatic int __xa_stat __P((DB *, void *, void *(*)(size_t), u_int32_t));
4a7f0ad21d4c6a48235ffd7f7f4610315212d0e6JnRouvignacstatic int __xa_sync __P((DB *, u_int32_t));
4a7f0ad21d4c6a48235ffd7f7f4610315212d0e6JnRouvignac
4a7f0ad21d4c6a48235ffd7f7f4610315212d0e6JnRouvignacint
4a7f0ad21d4c6a48235ffd7f7f4610315212d0e6JnRouvignacdb_xa_open(fname, type, flags, mode, dbinfo, dbpp)
4a7f0ad21d4c6a48235ffd7f7f4610315212d0e6JnRouvignac const char *fname;
4a7f0ad21d4c6a48235ffd7f7f4610315212d0e6JnRouvignac DBTYPE type;
13435a3727f5d58028108ab9dfdde0b4014998b5JnRouvignac u_int32_t flags;
f1a8b8986de97939dbfcbdfc23ee9e66d5faadb2JnRouvignac int mode;
11dea2cb49f8dfbd12424d677ab779a25d453b2aJnRouvignac DB_INFO *dbinfo;
11dea2cb49f8dfbd12424d677ab779a25d453b2aJnRouvignac DB **dbpp;
11dea2cb49f8dfbd12424d677ab779a25d453b2aJnRouvignac{
4a7f0ad21d4c6a48235ffd7f7f4610315212d0e6JnRouvignac DB *dbp, *real_dbp;
11dea2cb49f8dfbd12424d677ab779a25d453b2aJnRouvignac DB_ENV *dbenv;
11dea2cb49f8dfbd12424d677ab779a25d453b2aJnRouvignac struct __rmname *rp;
11dea2cb49f8dfbd12424d677ab779a25d453b2aJnRouvignac int ret;
4a7f0ad21d4c6a48235ffd7f7f4610315212d0e6JnRouvignac
11dea2cb49f8dfbd12424d677ab779a25d453b2aJnRouvignac /*
32a5083e32925d98e03a79d5026ba26d176d0f62JnRouvignac * First try to open up the underlying DB.
32a5083e32925d98e03a79d5026ba26d176d0f62JnRouvignac *
32a5083e32925d98e03a79d5026ba26d176d0f62JnRouvignac * !!!
32a5083e32925d98e03a79d5026ba26d176d0f62JnRouvignac * The dbenv argument is taken from the global list of environments.
32a5083e32925d98e03a79d5026ba26d176d0f62JnRouvignac * When the transaction manager called xa_start() (__db_xa_start()),
32a5083e32925d98e03a79d5026ba26d176d0f62JnRouvignac * the "current" DB environment was moved to the start of the list.
11dea2cb49f8dfbd12424d677ab779a25d453b2aJnRouvignac * However, if we were called in a tpsvrinit function (which is
11dea2cb49f8dfbd12424d677ab779a25d453b2aJnRouvignac * entirely plausible), then it's possible that xa_open was called
11dea2cb49f8dfbd12424d677ab779a25d453b2aJnRouvignac * (which simply recorded the name of the environment to open) and
4a7f0ad21d4c6a48235ffd7f7f4610315212d0e6JnRouvignac * this is the next call into DB. In that case, we still have to
11dea2cb49f8dfbd12424d677ab779a25d453b2aJnRouvignac * open the environment.
11dea2cb49f8dfbd12424d677ab779a25d453b2aJnRouvignac *
084bd019cee0fc133a55069326a7c3bd204aa936JnRouvignac * The way that we know that xa_open and nothing else was called
e29fffa2ec668b2d1cfbe5ee71f3f3bce1ba5375JnRouvignac * is because the nameq is not NULL.
084bd019cee0fc133a55069326a7c3bd204aa936JnRouvignac */
084bd019cee0fc133a55069326a7c3bd204aa936JnRouvignac if ((rp = TAILQ_FIRST(&DB_GLOBAL(db_nameq))) != NULL &&
943106fcb6a2100c9bdd2e044e454b7d2a2e900aJnRouvignac (ret = __db_rmid_to_env(rp->rmid, &dbenv, 1)) != 0)
943106fcb6a2100c9bdd2e044e454b7d2a2e900aJnRouvignac return (ret);
084bd019cee0fc133a55069326a7c3bd204aa936JnRouvignac
084bd019cee0fc133a55069326a7c3bd204aa936JnRouvignac dbenv = TAILQ_FIRST(&DB_GLOBAL(db_envq));
084bd019cee0fc133a55069326a7c3bd204aa936JnRouvignac if ((ret = db_open(fname,
084bd019cee0fc133a55069326a7c3bd204aa936JnRouvignac type, flags, mode, dbenv, dbinfo, &real_dbp)) != 0)
084bd019cee0fc133a55069326a7c3bd204aa936JnRouvignac return (ret);
084bd019cee0fc133a55069326a7c3bd204aa936JnRouvignac
084bd019cee0fc133a55069326a7c3bd204aa936JnRouvignac /*
943106fcb6a2100c9bdd2e044e454b7d2a2e900aJnRouvignac * Allocate our own DB handle, and copy the exported fields and
943106fcb6a2100c9bdd2e044e454b7d2a2e900aJnRouvignac * function pointers into it. The internal pointer references
32a5083e32925d98e03a79d5026ba26d176d0f62JnRouvignac * the real underlying DB handle.
32a5083e32925d98e03a79d5026ba26d176d0f62JnRouvignac */
32a5083e32925d98e03a79d5026ba26d176d0f62JnRouvignac if ((ret = __os_calloc(1, sizeof(DB), &dbp)) != 0) {
32a5083e32925d98e03a79d5026ba26d176d0f62JnRouvignac (void)real_dbp->close(real_dbp, 0);
32a5083e32925d98e03a79d5026ba26d176d0f62JnRouvignac return (ret);
084bd019cee0fc133a55069326a7c3bd204aa936JnRouvignac }
084bd019cee0fc133a55069326a7c3bd204aa936JnRouvignac dbp->type = real_dbp->type;
084bd019cee0fc133a55069326a7c3bd204aa936JnRouvignac dbp->byteswapped = real_dbp->byteswapped;
084bd019cee0fc133a55069326a7c3bd204aa936JnRouvignac dbp->dbenv = dbenv;
084bd019cee0fc133a55069326a7c3bd204aa936JnRouvignac dbp->internal = real_dbp;
084bd019cee0fc133a55069326a7c3bd204aa936JnRouvignac TAILQ_INIT(&dbp->active_queue);
084bd019cee0fc133a55069326a7c3bd204aa936JnRouvignac TAILQ_INIT(&dbp->free_queue);
084bd019cee0fc133a55069326a7c3bd204aa936JnRouvignac dbp->close = __xa_close;
084bd019cee0fc133a55069326a7c3bd204aa936JnRouvignac dbp->cursor = __xa_cursor;
084bd019cee0fc133a55069326a7c3bd204aa936JnRouvignac dbp->del = __xa_del;
084bd019cee0fc133a55069326a7c3bd204aa936JnRouvignac dbp->fd = __xa_fd;
084bd019cee0fc133a55069326a7c3bd204aa936JnRouvignac dbp->get = __xa_get;
084bd019cee0fc133a55069326a7c3bd204aa936JnRouvignac dbp->join = real_dbp->join;
084bd019cee0fc133a55069326a7c3bd204aa936JnRouvignac dbp->put = __xa_put;
084bd019cee0fc133a55069326a7c3bd204aa936JnRouvignac dbp->stat = __xa_stat;
084bd019cee0fc133a55069326a7c3bd204aa936JnRouvignac dbp->sync = __xa_sync;
084bd019cee0fc133a55069326a7c3bd204aa936JnRouvignac
084bd019cee0fc133a55069326a7c3bd204aa936JnRouvignac *dbpp = dbp;
084bd019cee0fc133a55069326a7c3bd204aa936JnRouvignac return (0);
084bd019cee0fc133a55069326a7c3bd204aa936JnRouvignac}
a90aefe298c0d3e67bd314bc7ce6322e8c3f5dccJnRouvignac
a90aefe298c0d3e67bd314bc7ce6322e8c3f5dccJnRouvignacstatic int
a90aefe298c0d3e67bd314bc7ce6322e8c3f5dccJnRouvignac__xa_close(dbp, flags)
a90aefe298c0d3e67bd314bc7ce6322e8c3f5dccJnRouvignac DB *dbp;
714cebcb84382ced1505d9b04accf744a76b3786JnRouvignac u_int32_t flags;
714cebcb84382ced1505d9b04accf744a76b3786JnRouvignac{
a90aefe298c0d3e67bd314bc7ce6322e8c3f5dccJnRouvignac DB *real_dbp;
a90aefe298c0d3e67bd314bc7ce6322e8c3f5dccJnRouvignac DBC *dbc;
a90aefe298c0d3e67bd314bc7ce6322e8c3f5dccJnRouvignac int ret;
a90aefe298c0d3e67bd314bc7ce6322e8c3f5dccJnRouvignac
a90aefe298c0d3e67bd314bc7ce6322e8c3f5dccJnRouvignac /* Close any associated cursors. */
a90aefe298c0d3e67bd314bc7ce6322e8c3f5dccJnRouvignac while ((dbc = TAILQ_FIRST(&dbp->active_queue)) != NULL)
084bd019cee0fc133a55069326a7c3bd204aa936JnRouvignac (void)dbc->c_close(dbc);
084bd019cee0fc133a55069326a7c3bd204aa936JnRouvignac
084bd019cee0fc133a55069326a7c3bd204aa936JnRouvignac /* Close the DB handle. */
084bd019cee0fc133a55069326a7c3bd204aa936JnRouvignac real_dbp = (DB *)dbp->internal;
084bd019cee0fc133a55069326a7c3bd204aa936JnRouvignac ret = real_dbp->close(real_dbp, flags);
084bd019cee0fc133a55069326a7c3bd204aa936JnRouvignac
084bd019cee0fc133a55069326a7c3bd204aa936JnRouvignac __os_free(dbp, sizeof(DB));
084bd019cee0fc133a55069326a7c3bd204aa936JnRouvignac return (ret);
084bd019cee0fc133a55069326a7c3bd204aa936JnRouvignac}
084bd019cee0fc133a55069326a7c3bd204aa936JnRouvignac
084bd019cee0fc133a55069326a7c3bd204aa936JnRouvignacstatic int
084bd019cee0fc133a55069326a7c3bd204aa936JnRouvignac__xa_cursor(dbp, txn, dbcp, flags)
084bd019cee0fc133a55069326a7c3bd204aa936JnRouvignac DB *dbp;
084bd019cee0fc133a55069326a7c3bd204aa936JnRouvignac DB_TXN *txn;
084bd019cee0fc133a55069326a7c3bd204aa936JnRouvignac DBC **dbcp;
32a5083e32925d98e03a79d5026ba26d176d0f62JnRouvignac u_int32_t flags;
32a5083e32925d98e03a79d5026ba26d176d0f62JnRouvignac{
32a5083e32925d98e03a79d5026ba26d176d0f62JnRouvignac DB *real_dbp;
084bd019cee0fc133a55069326a7c3bd204aa936JnRouvignac DBC *real_dbc, *dbc;
2aa4baaaad626108d109989d725d14fa559d3052ludo int ret;
084bd019cee0fc133a55069326a7c3bd204aa936JnRouvignac
084bd019cee0fc133a55069326a7c3bd204aa936JnRouvignac real_dbp = (DB *)dbp->internal;
084bd019cee0fc133a55069326a7c3bd204aa936JnRouvignac txn = dbp->dbenv->xa_txn;
084bd019cee0fc133a55069326a7c3bd204aa936JnRouvignac
084bd019cee0fc133a55069326a7c3bd204aa936JnRouvignac if ((ret = real_dbp->cursor(real_dbp, txn, &real_dbc, flags)) != 0)
714cebcb84382ced1505d9b04accf744a76b3786JnRouvignac return (ret);
714cebcb84382ced1505d9b04accf744a76b3786JnRouvignac
714cebcb84382ced1505d9b04accf744a76b3786JnRouvignac /*
714cebcb84382ced1505d9b04accf744a76b3786JnRouvignac * Allocate our own DBC handle, and copy the exported fields and
714cebcb84382ced1505d9b04accf744a76b3786JnRouvignac * function pointers into it. The internal pointer references
714cebcb84382ced1505d9b04accf744a76b3786JnRouvignac * the real underlying DBC handle.
714cebcb84382ced1505d9b04accf744a76b3786JnRouvignac */
714cebcb84382ced1505d9b04accf744a76b3786JnRouvignac if ((ret = __os_calloc(1, sizeof(DBC), &dbc)) != 0) {
714cebcb84382ced1505d9b04accf744a76b3786JnRouvignac (void)real_dbc->c_close(real_dbc);
714cebcb84382ced1505d9b04accf744a76b3786JnRouvignac return (ret);
2aa4baaaad626108d109989d725d14fa559d3052ludo }
714cebcb84382ced1505d9b04accf744a76b3786JnRouvignac dbc->dbp = dbp;
714cebcb84382ced1505d9b04accf744a76b3786JnRouvignac dbc->c_close = __xa_c_close;
714cebcb84382ced1505d9b04accf744a76b3786JnRouvignac dbc->c_del = __xa_c_del;
714cebcb84382ced1505d9b04accf744a76b3786JnRouvignac dbc->c_get = __xa_c_get;
714cebcb84382ced1505d9b04accf744a76b3786JnRouvignac dbc->c_put = __xa_c_put;
714cebcb84382ced1505d9b04accf744a76b3786JnRouvignac dbc->internal = real_dbc;
714cebcb84382ced1505d9b04accf744a76b3786JnRouvignac TAILQ_INSERT_TAIL(&dbp->active_queue, dbc, links);
714cebcb84382ced1505d9b04accf744a76b3786JnRouvignac
714cebcb84382ced1505d9b04accf744a76b3786JnRouvignac *dbcp = dbc;
714cebcb84382ced1505d9b04accf744a76b3786JnRouvignac return (0);
714cebcb84382ced1505d9b04accf744a76b3786JnRouvignac}
714cebcb84382ced1505d9b04accf744a76b3786JnRouvignac
714cebcb84382ced1505d9b04accf744a76b3786JnRouvignacstatic int
7ee3086082934b8f89117681b6ddb835b7a17ae9JnRouvignac__xa_fd(dbp, fdp)
943106fcb6a2100c9bdd2e044e454b7d2a2e900aJnRouvignac DB *dbp;
714cebcb84382ced1505d9b04accf744a76b3786JnRouvignac int *fdp;
714cebcb84382ced1505d9b04accf744a76b3786JnRouvignac{
2aa4baaaad626108d109989d725d14fa559d3052ludo DB *real_dbp;
714cebcb84382ced1505d9b04accf744a76b3786JnRouvignac
714cebcb84382ced1505d9b04accf744a76b3786JnRouvignac COMPQUIET(fdp, NULL);
714cebcb84382ced1505d9b04accf744a76b3786JnRouvignac
714cebcb84382ced1505d9b04accf744a76b3786JnRouvignac real_dbp = (DB *)dbp->internal;
714cebcb84382ced1505d9b04accf744a76b3786JnRouvignac return (__db_eopnotsup(real_dbp->dbenv));
714cebcb84382ced1505d9b04accf744a76b3786JnRouvignac}
714cebcb84382ced1505d9b04accf744a76b3786JnRouvignac
714cebcb84382ced1505d9b04accf744a76b3786JnRouvignacstatic int
714cebcb84382ced1505d9b04accf744a76b3786JnRouvignac__xa_del(dbp, txn, key, flags)
4a7f0ad21d4c6a48235ffd7f7f4610315212d0e6JnRouvignac DB *dbp;
4a7f0ad21d4c6a48235ffd7f7f4610315212d0e6JnRouvignac DB_TXN *txn;
4a7f0ad21d4c6a48235ffd7f7f4610315212d0e6JnRouvignac DBT *key;
11dea2cb49f8dfbd12424d677ab779a25d453b2aJnRouvignac u_int32_t flags;
11dea2cb49f8dfbd12424d677ab779a25d453b2aJnRouvignac{
11dea2cb49f8dfbd12424d677ab779a25d453b2aJnRouvignac DB *real_dbp;
11dea2cb49f8dfbd12424d677ab779a25d453b2aJnRouvignac
f1a8b8986de97939dbfcbdfc23ee9e66d5faadb2JnRouvignac real_dbp = (DB *)dbp->internal;
4a7f0ad21d4c6a48235ffd7f7f4610315212d0e6JnRouvignac txn = dbp->dbenv->xa_txn;
4a7f0ad21d4c6a48235ffd7f7f4610315212d0e6JnRouvignac
4a7f0ad21d4c6a48235ffd7f7f4610315212d0e6JnRouvignac return (real_dbp->del(real_dbp, txn, key, flags));
4a7f0ad21d4c6a48235ffd7f7f4610315212d0e6JnRouvignac}
4a7f0ad21d4c6a48235ffd7f7f4610315212d0e6JnRouvignac
11dea2cb49f8dfbd12424d677ab779a25d453b2aJnRouvignacstatic int
11dea2cb49f8dfbd12424d677ab779a25d453b2aJnRouvignac__xa_get(dbp, txn, key, data, flags)
11dea2cb49f8dfbd12424d677ab779a25d453b2aJnRouvignac DB *dbp;
11dea2cb49f8dfbd12424d677ab779a25d453b2aJnRouvignac DB_TXN *txn;
11dea2cb49f8dfbd12424d677ab779a25d453b2aJnRouvignac DBT *key;
11dea2cb49f8dfbd12424d677ab779a25d453b2aJnRouvignac DBT *data;
4a7f0ad21d4c6a48235ffd7f7f4610315212d0e6JnRouvignac u_int32_t flags;
4a7f0ad21d4c6a48235ffd7f7f4610315212d0e6JnRouvignac{
4a7f0ad21d4c6a48235ffd7f7f4610315212d0e6JnRouvignac DB *real_dbp;
11dea2cb49f8dfbd12424d677ab779a25d453b2aJnRouvignac
4a7f0ad21d4c6a48235ffd7f7f4610315212d0e6JnRouvignac real_dbp = (DB *)dbp->internal;
4a7f0ad21d4c6a48235ffd7f7f4610315212d0e6JnRouvignac txn = dbp->dbenv->xa_txn;
4a7f0ad21d4c6a48235ffd7f7f4610315212d0e6JnRouvignac
11dea2cb49f8dfbd12424d677ab779a25d453b2aJnRouvignac return (real_dbp->get(real_dbp, txn, key, data, flags));
11dea2cb49f8dfbd12424d677ab779a25d453b2aJnRouvignac}
4a7f0ad21d4c6a48235ffd7f7f4610315212d0e6JnRouvignac
11dea2cb49f8dfbd12424d677ab779a25d453b2aJnRouvignacstatic int
11dea2cb49f8dfbd12424d677ab779a25d453b2aJnRouvignac__xa_put(dbp, txn, key, data, flags)
11dea2cb49f8dfbd12424d677ab779a25d453b2aJnRouvignac DB *dbp;
11dea2cb49f8dfbd12424d677ab779a25d453b2aJnRouvignac DB_TXN *txn;
11dea2cb49f8dfbd12424d677ab779a25d453b2aJnRouvignac DBT *key;
11dea2cb49f8dfbd12424d677ab779a25d453b2aJnRouvignac DBT *data;
11dea2cb49f8dfbd12424d677ab779a25d453b2aJnRouvignac u_int32_t flags;
11dea2cb49f8dfbd12424d677ab779a25d453b2aJnRouvignac{
11dea2cb49f8dfbd12424d677ab779a25d453b2aJnRouvignac DB *real_dbp;
11dea2cb49f8dfbd12424d677ab779a25d453b2aJnRouvignac
11dea2cb49f8dfbd12424d677ab779a25d453b2aJnRouvignac real_dbp = (DB *)dbp->internal;
943106fcb6a2100c9bdd2e044e454b7d2a2e900aJnRouvignac txn = dbp->dbenv->xa_txn;
11dea2cb49f8dfbd12424d677ab779a25d453b2aJnRouvignac
11dea2cb49f8dfbd12424d677ab779a25d453b2aJnRouvignac return (real_dbp->put(real_dbp, txn, key, data, flags));
943106fcb6a2100c9bdd2e044e454b7d2a2e900aJnRouvignac}
943106fcb6a2100c9bdd2e044e454b7d2a2e900aJnRouvignac
943106fcb6a2100c9bdd2e044e454b7d2a2e900aJnRouvignacstatic int
943106fcb6a2100c9bdd2e044e454b7d2a2e900aJnRouvignac__xa_stat(dbp, spp, db_malloc, flags)
943106fcb6a2100c9bdd2e044e454b7d2a2e900aJnRouvignac DB *dbp;
943106fcb6a2100c9bdd2e044e454b7d2a2e900aJnRouvignac void *spp;
943106fcb6a2100c9bdd2e044e454b7d2a2e900aJnRouvignac void *(*db_malloc) __P((size_t));
943106fcb6a2100c9bdd2e044e454b7d2a2e900aJnRouvignac u_int32_t flags;
943106fcb6a2100c9bdd2e044e454b7d2a2e900aJnRouvignac{
943106fcb6a2100c9bdd2e044e454b7d2a2e900aJnRouvignac DB *real_dbp;
943106fcb6a2100c9bdd2e044e454b7d2a2e900aJnRouvignac
943106fcb6a2100c9bdd2e044e454b7d2a2e900aJnRouvignac real_dbp = (DB *)dbp->internal;
943106fcb6a2100c9bdd2e044e454b7d2a2e900aJnRouvignac return (real_dbp->stat(real_dbp, spp, db_malloc, flags));
7ee3086082934b8f89117681b6ddb835b7a17ae9JnRouvignac}
943106fcb6a2100c9bdd2e044e454b7d2a2e900aJnRouvignac
943106fcb6a2100c9bdd2e044e454b7d2a2e900aJnRouvignacstatic int
943106fcb6a2100c9bdd2e044e454b7d2a2e900aJnRouvignac__xa_sync(dbp, flags)
943106fcb6a2100c9bdd2e044e454b7d2a2e900aJnRouvignac DB *dbp;
be8b385cf709ac602154a3369708c29746a430bdJnRouvignac u_int32_t flags;
943106fcb6a2100c9bdd2e044e454b7d2a2e900aJnRouvignac{
943106fcb6a2100c9bdd2e044e454b7d2a2e900aJnRouvignac DB *real_dbp;
943106fcb6a2100c9bdd2e044e454b7d2a2e900aJnRouvignac
7ee3086082934b8f89117681b6ddb835b7a17ae9JnRouvignac real_dbp = (DB *)dbp->internal;
943106fcb6a2100c9bdd2e044e454b7d2a2e900aJnRouvignac return (real_dbp->sync(real_dbp, flags));
943106fcb6a2100c9bdd2e044e454b7d2a2e900aJnRouvignac}
943106fcb6a2100c9bdd2e044e454b7d2a2e900aJnRouvignac
943106fcb6a2100c9bdd2e044e454b7d2a2e900aJnRouvignacstatic int
943106fcb6a2100c9bdd2e044e454b7d2a2e900aJnRouvignac__xa_c_close(dbc)
13435a3727f5d58028108ab9dfdde0b4014998b5JnRouvignac DBC *dbc;
13435a3727f5d58028108ab9dfdde0b4014998b5JnRouvignac{
7bee57a5d6c6adfbefbd32ae84f79ca81c2fa629JnRouvignac DBC *real_dbc;
11dea2cb49f8dfbd12424d677ab779a25d453b2aJnRouvignac int ret;
43b51b383215ce9df9001940d3930d32ea1a784fJnRouvignac
084bd019cee0fc133a55069326a7c3bd204aa936JnRouvignac real_dbc = (DBC *)dbc->internal;
084bd019cee0fc133a55069326a7c3bd204aa936JnRouvignac
084bd019cee0fc133a55069326a7c3bd204aa936JnRouvignac ret = real_dbc->c_close(real_dbc);
c87c8fef4847562b343af5b65855fe0f5587c72eJnRouvignac
c87c8fef4847562b343af5b65855fe0f5587c72eJnRouvignac TAILQ_REMOVE(&dbc->dbp->active_queue, dbc, links);
7ee3086082934b8f89117681b6ddb835b7a17ae9JnRouvignac __os_free(dbc, sizeof(DBC));
c87c8fef4847562b343af5b65855fe0f5587c72eJnRouvignac
c87c8fef4847562b343af5b65855fe0f5587c72eJnRouvignac return (ret);
11dea2cb49f8dfbd12424d677ab779a25d453b2aJnRouvignac}
11dea2cb49f8dfbd12424d677ab779a25d453b2aJnRouvignac
fe8760a025521d2223b4e0f7b972a3262673b188JnRouvignacstatic int
11dea2cb49f8dfbd12424d677ab779a25d453b2aJnRouvignac__xa_c_del(dbc, flags)
11dea2cb49f8dfbd12424d677ab779a25d453b2aJnRouvignac DBC *dbc;
11dea2cb49f8dfbd12424d677ab779a25d453b2aJnRouvignac u_int32_t flags;
43b51b383215ce9df9001940d3930d32ea1a784fJnRouvignac{
43b51b383215ce9df9001940d3930d32ea1a784fJnRouvignac DBC *real_dbc;
43b51b383215ce9df9001940d3930d32ea1a784fJnRouvignac
11dea2cb49f8dfbd12424d677ab779a25d453b2aJnRouvignac real_dbc = (DBC *)dbc->internal;
7ee3086082934b8f89117681b6ddb835b7a17ae9JnRouvignac return (real_dbc->c_del(real_dbc, flags));
4a7f0ad21d4c6a48235ffd7f7f4610315212d0e6JnRouvignac}
084bd019cee0fc133a55069326a7c3bd204aa936JnRouvignac
084bd019cee0fc133a55069326a7c3bd204aa936JnRouvignacstatic int
4a7f0ad21d4c6a48235ffd7f7f4610315212d0e6JnRouvignac__xa_c_get(dbc, key, data, flags)
943106fcb6a2100c9bdd2e044e454b7d2a2e900aJnRouvignac DBC *dbc;
084bd019cee0fc133a55069326a7c3bd204aa936JnRouvignac DBT *key;
f1a8b8986de97939dbfcbdfc23ee9e66d5faadb2JnRouvignac DBT *data;
a90aefe298c0d3e67bd314bc7ce6322e8c3f5dccJnRouvignac u_int32_t flags;
13435a3727f5d58028108ab9dfdde0b4014998b5JnRouvignac{
2aa4baaaad626108d109989d725d14fa559d3052ludo DBC *real_dbc;
2aa4baaaad626108d109989d725d14fa559d3052ludo
084bd019cee0fc133a55069326a7c3bd204aa936JnRouvignac real_dbc = (DBC *)dbc->internal;
084bd019cee0fc133a55069326a7c3bd204aa936JnRouvignac return (real_dbc->c_get(real_dbc, key, data, flags));
084bd019cee0fc133a55069326a7c3bd204aa936JnRouvignac}
084bd019cee0fc133a55069326a7c3bd204aa936JnRouvignac
2aa4baaaad626108d109989d725d14fa559d3052ludostatic int
084bd019cee0fc133a55069326a7c3bd204aa936JnRouvignac__xa_c_put(dbc, key, data, flags)
084bd019cee0fc133a55069326a7c3bd204aa936JnRouvignac DBC *dbc;
084bd019cee0fc133a55069326a7c3bd204aa936JnRouvignac DBT *key;
084bd019cee0fc133a55069326a7c3bd204aa936JnRouvignac DBT *data;
084bd019cee0fc133a55069326a7c3bd204aa936JnRouvignac u_int32_t flags;
11dea2cb49f8dfbd12424d677ab779a25d453b2aJnRouvignac{
11dea2cb49f8dfbd12424d677ab779a25d453b2aJnRouvignac DBC *real_dbc;
084bd019cee0fc133a55069326a7c3bd204aa936JnRouvignac
084bd019cee0fc133a55069326a7c3bd204aa936JnRouvignac real_dbc = (DBC *)dbc->internal;
084bd019cee0fc133a55069326a7c3bd204aa936JnRouvignac return (real_dbc->c_put(real_dbc, key, data, flags));
084bd019cee0fc133a55069326a7c3bd204aa936JnRouvignac}
084bd019cee0fc133a55069326a7c3bd204aa936JnRouvignac