• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-WNDR4500-V1.0.1.40_1.0.68/ap/gpl/timemachine/db-4.7.25.NC/txn/

Lines Matching refs:txn

37  * $Id: txn.c,v 12.89 2008/04/19 15:47:42 mjc Exp $
50 #include "dbinc/txn.h"
52 #define LOG_FLAGS(txn) \
53 (DB_LOG_COMMIT | (F_ISSET(txn, TXN_SYNC) ? \
54 DB_FLUSH : (F_ISSET(txn, TXN_WRITE_NOSYNC) ? \
131 * txn is resolved by txn_commit, txn_abort, etc.
164 DB_TXN *txn;
169 if ((ret = __os_calloc(env, 1, sizeof(DB_TXN), &txn)) != 0)
173 txn->mgrp = env->tx_handle;
174 txn->parent = parent;
175 TAILQ_INIT(&txn->kids);
176 TAILQ_INIT(&txn->events);
177 STAILQ_INIT(&txn->logs);
178 txn->flags = TXN_MALLOC;
179 txn->thread_info =
187 F_SET(txn, TXN_SYNC);
189 F_SET(txn, TXN_NOSYNC);
191 F_SET(txn, TXN_WRITE_NOSYNC);
193 F_SET(txn, TXN_NOSYNC);
195 F_SET(txn, TXN_WRITE_NOSYNC);
197 F_SET(txn, TXN_SYNC);
201 F_SET(txn, TXN_NOWAIT);
203 F_SET(txn, TXN_READ_COMMITTED);
205 F_SET(txn, TXN_READ_UNCOMMITTED);
208 F_SET(txn, TXN_SNAPSHOT);
210 if ((ret = __txn_begin_int(txn)) != 0)
212 td = txn->td;
216 TAILQ_INSERT_HEAD(&parent->kids, txn, klinks);
224 parent->locker, txn->locker);
239 if ((ret = __lock_set_timeout(env, txn->locker,
244 *txnpp = txn;
248 __os_free(env, txn);
259 __txn_xa_begin(env, txn)
261 DB_TXN *txn;
267 txn->mgrp = env->tx_handle;
268 TAILQ_INIT(&txn->kids);
269 TAILQ_INIT(&txn->events);
270 STAILQ_INIT(&txn->logs);
271 txn->parent = NULL;
272 txn->txnid = TXN_INVALID;
273 txn->cursors = 0;
274 memset(&txn->lock_timeout, 0, sizeof(db_timeout_t));
275 memset(&txn->expire, 0, sizeof(db_timeout_t));
277 return (__txn_begin_int(txn));
337 DB_TXN *txn;
340 if ((ret = __os_calloc(env, 1, sizeof(DB_TXN), &txn)) != 0)
343 txn->mgrp = env->tx_handle;
344 TAILQ_INIT(&txn->kids);
345 TAILQ_INIT(&txn->events);
346 STAILQ_INIT(&txn->logs);
347 txn->flags = TXN_COMPENSATE | TXN_MALLOC;
349 *txnpp = txn;
350 return (__txn_begin_int(txn));
358 __txn_begin_int(txn)
359 DB_TXN *txn;
369 mgr = txn->mgrp;
375 if (!F_ISSET(txn, TXN_COMPENSATE) && F_ISSET(region, TXN_IN_RECOVERY)) {
415 /* allocate a locker for this txn */
417 __lock_getlocker(env->lk_handle, id, 1, &txn->locker)) != 0)
423 if (txn->parent != NULL)
424 td->parent = R_OFFSET(&mgr->reginfo, txn->parent->td);
441 txn->txnid = id;
442 txn->td = td;
444 txn->abort = __txn_abort_pp;
445 txn->commit = __txn_commit_pp;
446 txn->discard = __txn_discard;
447 txn->get_name = __txn_get_name;
448 txn->id = __txn_id;
449 txn->prepare = __txn_prepare;
450 txn->set_txn_lsnp = __txn_set_txn_lsnp;
451 txn->set_name = __txn_set_name;
452 txn->set_timeout = __txn_set_timeout;
458 if (txn->parent != NULL && LOCKING_ON(env))
460 txn->parent->txnid, txn->txnid)) != 0)
463 if (F_ISSET(txn, TXN_MALLOC)) {
465 TAILQ_INSERT_TAIL(&mgr->txn_chain, txn, links);
483 __txn_continue(env, txn, td)
485 DB_TXN *txn;
492 txn->mgrp = env->tx_handle;
493 txn->parent = NULL;
494 txn->txnid = td->txnid;
495 txn->td = td;
497 txn->abort = __txn_abort_pp;
498 txn->commit = __txn_commit_pp;
499 txn->discard = __txn_discard;
500 txn->get_name = __txn_get_name;
501 txn->id = __txn_id;
502 txn->prepare = __txn_prepare;
503 txn->set_name = __txn_set_name;
505 txn->flags = 0;
513 F_SET(txn, TXN_RESTORED);
516 txn->txnid, 0, &txn->locker);
526 __txn_commit_pp(txn, flags)
527 DB_TXN *txn;
534 env = txn->mgrp->env;
535 not_child = txn->parent == NULL;
539 ret = __txn_commit(txn, flags);
554 __txn_commit(txn, flags)
555 DB_TXN *txn;
568 env = txn->mgrp->env;
569 td = txn->td;
575 if (F_ISSET(txn, TXN_DEADLOCK)) {
576 ret = __db_txn_deadlock_err(env, txn);
580 if ((ret = __txn_isvalid(txn, TXN_OP_COMMIT)) != 0)
586 * abort this txn. Leases are granted on PERM records,
594 if (txn->parent == NULL && IS_REP_MASTER(env) &&
624 F_CLR(txn, TXN_SYNC_FLAGS);
625 F_SET(txn, TXN_WRITE_NOSYNC);
628 F_CLR(txn, TXN_SYNC_FLAGS);
629 F_SET(txn, TXN_NOSYNC);
632 F_CLR(txn, TXN_SYNC_FLAGS);
633 F_SET(txn, TXN_SYNC);
636 DB_ASSERT(env, F_ISSET(txn, TXN_SYNC_FLAGS));
643 while ((kid = TAILQ_FIRST(&txn->kids)) != NULL)
645 while ((kid = TAILQ_FIRST(&txn->kids)) != NULL)
657 STAILQ_FIRST(&txn->logs) != NULL)) {
658 if (txn->parent == NULL) {
668 __txn_doevents(env, txn, TXN_PREPARE, 1)) != 0)
680 txn->locker, 0, &request, 1, NULL);
684 ret = __txn_regop_log(env, txn,
685 &td->visible_lsn, LOG_FLAGS(txn),
710 (ret = __txn_child_log(env, txn->parent,
711 &((TXN_DETAIL *)txn->parent->td)->last_lsn,
712 0, txn->txnid, &td->last_lsn)) != 0) {
715 if (STAILQ_FIRST(&txn->logs) != NULL) {
720 STAILQ_CONCAT(&txn->logs, &txn->parent->logs);
721 txn->parent->logs = txn->logs;
722 STAILQ_INIT(&txn->logs);
725 F_SET(txn->parent, TXN_CHILDCOMMIT);
729 if (txn->txn_list != NULL) {
730 __db_txnlist_end(env, txn->txn_list);
731 txn->txn_list = NULL;
743 if (txn->parent == NULL && IS_REP_MASTER(env) && IS_USING_LEASES(env) &&
749 return (__txn_end(txn, 1));
762 if ((t_ret = __txn_abort(txn)) != 0)
772 __txn_abort_pp(txn)
773 DB_TXN *txn;
779 env = txn->mgrp->env;
780 not_child = txn->parent == NULL;
784 ret = __txn_abort(txn);
799 __txn_abort(txn)
800 DB_TXN *txn;
811 env = txn->mgrp->env;
812 td = txn->td;
815 if ((ret = __txn_isvalid(txn, TXN_OP_ABORT)) != 0)
825 while ((kid = TAILQ_FIRST(&txn->kids)) != NULL)
842 if (IS_ZERO_LSN(td->last_lsn) && STAILQ_FIRST(&txn->logs) == NULL) {
843 if (txn->txn_list == NULL)
850 /* Allocate a locker for this restored txn if necessary. */
851 if (txn->locker == NULL &&
853 txn->txnid, 1, &txn->locker)) != 0)
862 if ((ret = __txn_doevents(env, txn, TXN_ABORT, 1)) != 0)
867 txn->locker, 0, DB_SET_TXN_TIMEOUT)) != 0)
871 txn->locker, 0, DB_SET_LOCK_TIMEOUT)) != 0)
877 env, txn->locker, 0, &request, 1, NULL)) != 0)
880 undo: if ((ret = __txn_undo(txn)) != 0)
890 (ret = __txn_regop_log(env, txn, &td->last_lsn,
891 LOG_FLAGS(txn), TXN_ABORT, (int32_t)time(NULL), id, NULL)) != 0)
895 return (__txn_end(txn, 0));
903 __txn_discard(txn, flags)
904 DB_TXN *txn;
911 env = txn->mgrp->env;
914 ret = __txn_discard_int(txn, flags);
924 * Free the per-process resources associated with this txn handle.
929 __txn_discard_int(txn, flags)
930 DB_TXN *txn;
940 mgr = txn->mgrp;
944 if ((ret = __txn_isvalid(txn, TXN_OP_DISCARD)) != 0)
948 DB_ASSERT(env, TAILQ_FIRST(&txn->kids) == NULL);
953 if (F_ISSET(txn, TXN_MALLOC)) {
954 TAILQ_REMOVE(&mgr->txn_chain, txn, links);
955 freep = txn;
971 __txn_prepare(txn, gid)
972 DB_TXN *txn;
984 env = txn->mgrp->env;
985 td = txn->td;
987 if ((ret = __txn_isvalid(txn, TXN_OP_PREPARE)) != 0)
989 if (F_ISSET(txn, TXN_DEADLOCK))
990 return (__db_txn_deadlock_err(env, txn));
995 while ((kid = TAILQ_FIRST(&txn->kids)) != NULL)
1007 if ((ret = __txn_doevents(env, txn, TXN_PREPARE, 1)) != 0)
1017 txn->locker, 0, &request, 1, NULL)) != 0)
1032 if ((ret = __txn_xa_regop_log(env, txn, &td->last_lsn,
1045 MUTEX_LOCK(env, txn->mgrp->mutex);
1047 MUTEX_UNLOCK(env, txn->mgrp->mutex);
1059 __txn_id(txn)
1060 DB_TXN *txn;
1062 return (txn->txnid);
1072 __txn_get_name(txn, namep)
1073 DB_TXN *txn;
1076 *namep = txn->name;
1088 __txn_set_name(txn, name)
1089 DB_TXN *txn;
1100 mgr = txn->mgrp;
1102 td = txn->td;
1105 if ((ret = __os_realloc(env, len, &txn->name)) != 0)
1107 memcpy(txn->name, name, len);
1121 __os_free(env, txn->name);
1122 txn->name = NULL;
1137 (void)__log_printf(env, txn,
1138 "transaction %#lx named %s", (u_long)txn->txnid, name);
1151 __txn_set_timeout(txn, timeout, op)
1152 DB_TXN *txn;
1160 env = txn->mgrp->env;
1166 ret = __lock_set_timeout( env, txn->locker, timeout, op);
1167 ENV_LEAVE(txn->mgrp->env, ip);
1176 __txn_isvalid(txn, op)
1177 const DB_TXN *txn;
1185 mgr = txn->mgrp;
1190 if (!F_ISSET(txn, TXN_COMPENSATE) &&
1197 if (txn->cursors != 0) {
1203 td = txn->td;
1214 if (txn->txnid != td->txnid)
1229 if (txn->parent != NULL) {
1285 __txn_end(txn, is_commit)
1286 DB_TXN *txn;
1298 mgr = txn->mgrp;
1305 txn, is_commit ? TXN_COMMIT : TXN_ABORT, 0)) != 0)
1318 /* Allocate a locker for this restored txn if necessary. */
1319 if (txn->locker == NULL &&
1321 txn->txnid, 1, &txn->locker)) != 0)
1323 request.op = txn->parent == NULL ||
1327 txn->locker, 0, &request, 1, NULL)) != 0)
1332 td = txn->td;
1333 if (td->nlog_dbs != 0 && (ret = __txn_dref_fname(env, txn)) != 0)
1363 if (txn->parent != NULL) {
1364 ptd = txn->parent->td;
1407 __lock_freefamilylocker(env->lk_handle, txn->locker)) != 0)
1409 if (txn->parent != NULL)
1410 TAILQ_REMOVE(&txn->parent->kids, txn, klinks);
1413 while ((lr = STAILQ_FIRST(&txn->logs)) != NULL) {
1414 STAILQ_REMOVE(&txn->logs, lr, __txn_logrec, links);
1417 if (txn->name != NULL) {
1418 __os_free(env, txn->name);
1419 txn->name = NULL;
1421 if (F_ISSET(txn, TXN_MALLOC)) {
1423 TAILQ_REMOVE(&mgr->txn_chain, txn, links);
1426 __os_free(env, txn);
1432 * txn and need to invalidate the fileids that were left
1449 __txn_dispatch_undo(env, txn, rdbt, key_lsn, txnlist)
1451 DB_TXN *txn;
1458 txnlist->td = txn->td;
1462 F_SET(txn, TXN_CHILDCOMMIT);
1465 if (ret == 0 && F_ISSET(txn, TXN_CHILDCOMMIT) && IS_ZERO_LSN(*key_lsn))
1476 __txn_undo(txn)
1477 DB_TXN *txn;
1489 mgr = txn->mgrp;
1511 for (ptxn = txn->parent; ptxn != NULL && ptxn->parent != NULL;)
1516 else if (txn->txn_list != NULL)
1517 txnlist = txn->txn_list;
1519 txn->thread_info, 0, 0, NULL, &txnlist)) != 0)
1528 STAILQ_FOREACH(lr, &txn->logs, links) {
1533 __txn_dispatch_undo(env, txn, &rdbt, &key_lsn, txnlist);
1541 key_lsn = ((TXN_DETAIL *)txn->td)->last_lsn;
1554 txn, &rdbt, &key_lsn, txnlist);
1580 __txn_activekids(env, rectype, txn)
1583 DB_TXN *txn;
1589 if (F_ISSET(txn, TXN_COMPENSATE) || rectype == DB___txn_child)
1592 if (TAILQ_FIRST(&txn->kids) != NULL) {
1622 * __txn_xa_regop records in txn.src. We are passed the beginning
1728 __txn_set_txn_lsnp(txn, blsnp, llsnp)
1729 DB_TXN *txn;
1734 td = txn->td;
1737 while (txn->parent != NULL)
1738 txn = txn->parent;
1740 td = txn->td;