diff options
Diffstat (limited to 'db2/txn')
-rw-r--r-- | db2/txn/txn.c | 31 | ||||
-rw-r--r-- | db2/txn/txn_auto.c | 16 | ||||
-rw-r--r-- | db2/txn/txn_rec.c | 6 |
3 files changed, 29 insertions, 24 deletions
diff --git a/db2/txn/txn.c b/db2/txn/txn.c index 9a0d626c3e..55423f0470 100644 --- a/db2/txn/txn.c +++ b/db2/txn/txn.c @@ -43,7 +43,7 @@ #include "config.h" #ifndef lint -static const char sccsid[] = "@(#)txn.c 10.30 (Sleepycat) 9/23/97"; +static const char sccsid[] = "@(#)txn.c 10.35 (Sleepycat) 11/2/97"; #endif /* not lint */ @@ -187,7 +187,7 @@ retry1: if ((ret = __db_ropen(dbenv, DB_APP_NONE, path, DEFAULT_TXN_FILE, } /* Now, create the transaction manager structure and set its fields. */ - if ((tmgrp = (DB_TXNMGR *)malloc(sizeof(DB_TXNMGR))) == NULL) { + if ((tmgrp = (DB_TXNMGR *)__db_malloc(sizeof(DB_TXNMGR))) == NULL) { __db_err(dbenv, "txn_open: %s", strerror(ENOMEM)); ret = ENOMEM; goto out; @@ -205,7 +205,7 @@ retry1: if ((ret = __db_ropen(dbenv, DB_APP_NONE, path, DEFAULT_TXN_FILE, TAILQ_INIT(&tmgrp->txn_chain); if (LF_ISSET(DB_THREAD)) { LOCK_TXNREGION(tmgrp); - if ((ret = __db_shalloc(tmgrp->mem, sizeof(db_mutex_t), + if ((ret = __db_shalloc(tmgrp->mem, sizeof(db_mutex_t), MUTEX_ALIGNMENT, &tmgrp->mutexp)) == 0) __db_mutex_init(tmgrp->mutexp, -1); UNLOCK_TXNREGION(tmgrp); @@ -225,7 +225,7 @@ out: if (txn_regionp != NULL) __db_shalloc_free(tmgrp->mem, tmgrp->mutexp); UNLOCK_TXNREGION(tmgrp); } - free(tmgrp); + __db_free(tmgrp); } return (ret); } @@ -254,7 +254,7 @@ txn_begin(tmgrp, parent, txnpp) if ((ret = __db_shalloc(tmgrp->mem, sizeof(TXN_DETAIL), 0, &txnp)) != 0 && ret == ENOMEM && (ret = __txn_grow_region(tmgrp)) == 0) ret = __db_shalloc(tmgrp->mem, sizeof(TXN_DETAIL), 0, &txnp); - + if (ret != 0) goto err; @@ -262,7 +262,7 @@ txn_begin(tmgrp, parent, txnpp) if (tmgrp->region->last_txnid == TXN_INVALID) return (EINVAL); - if ((retp = (DB_TXN *)malloc(sizeof(DB_TXN))) == NULL) { + if ((retp = (DB_TXN *)__db_malloc(sizeof(DB_TXN))) == NULL) { __db_err(tmgrp->dbenv, "txn_begin : %s", strerror(ENOMEM)); ret = ENOMEM; goto err1; @@ -297,7 +297,7 @@ txn_begin(tmgrp, parent, txnpp) txnp, links, __txn_detail); __db_shalloc_free(tmgrp->mem, txnp); UNLOCK_TXNREGION(tmgrp); - free (retp); + __db_free(retp); return (ret); } @@ -433,7 +433,7 @@ txn_close(tmgrp) ret = t_ret; if (ret == 0) - free (tmgrp); + __db_free(tmgrp); return (ret); } @@ -561,7 +561,7 @@ __txn_undo(txnp) ret = mgr->recover(logp, &rdbt, &key_lsn, TXN_UNDO, NULL); if (F_ISSET(logp, DB_AM_THREAD) && rdbt.data != NULL) { - free(rdbt.data); + __db_free(rdbt.data); rdbt.data = NULL; } } @@ -590,7 +590,7 @@ txn_checkpoint(mgr, kbytes, minutes) TXN_DETAIL *txnp; DB_LSN ckp_lsn, last_ckp; DB_LOG *dblp; - u_int32_t bytes_written; + u_int32_t kbytes_written; time_t last_ckp_time, now; int ret; @@ -616,10 +616,12 @@ txn_checkpoint(mgr, kbytes, minutes) if (kbytes != 0) { dblp = mgr->dbenv->lg_info; LOCK_LOGREGION(dblp); - bytes_written = dblp->lp->written; + kbytes_written = + dblp->lp->stat.st_wc_mbytes * 1024 + + dblp->lp->stat.st_wc_bytes / 1024; ckp_lsn = dblp->lp->lsn; UNLOCK_LOGREGION(dblp); - if (bytes_written >= (u_int32_t)(kbytes * 1024)) + if (kbytes_written >= (u_int32_t)kbytes) goto do_ckp; } @@ -726,12 +728,14 @@ __txn_grow_region(tp) DB_TXNMGR *tp; { size_t incr; + off_t mutex_offset; u_int32_t oldmax; u_int8_t *curaddr; int ret; oldmax = tp->region->maxtxns; incr = oldmax * sizeof(DB_TXN); + mutex_offset = (u_int8_t *)tp->mutexp - (u_int8_t *)tp->region; if ((ret = __db_rgrow(tp->dbenv, tp->fd, incr)) != 0) return (ret); @@ -744,6 +748,7 @@ __txn_grow_region(tp) curaddr = (u_int8_t *)tp->region + tp->reg_size; tp->mem = &tp->region[1]; tp->reg_size += incr; + tp->mutexp = (db_mutex_t *)((u_int8_t *)tp->region + mutex_offset); *((size_t *)curaddr) = incr - sizeof(size_t); curaddr += sizeof(size_t); @@ -776,7 +781,7 @@ txn_stat(mgr, statp, db_malloc) */ nbytes = sizeof(DB_TXN_STAT) + sizeof(DB_TXN_ACTIVE) * (nactive + 200); if (db_malloc == NULL) - stats = (DB_TXN_STAT *)malloc(nbytes); + stats = (DB_TXN_STAT *)__db_malloc(nbytes); else stats = (DB_TXN_STAT *)db_malloc(nbytes); diff --git a/db2/txn/txn_auto.c b/db2/txn/txn_auto.c index baef7333c7..9edbc03eab 100644 --- a/db2/txn/txn_auto.c +++ b/db2/txn/txn_auto.c @@ -46,7 +46,7 @@ int __txn_regop_log(logp, txnid, ret_lsnp, flags, lsnp = &txnid->last_lsn; logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN) + sizeof(opcode); - if ((logrec.data = (void *)malloc(logrec.size)) == NULL) + if ((logrec.data = (void *)__db_malloc(logrec.size)) == NULL) return (ENOMEM); bp = logrec.data; @@ -65,7 +65,7 @@ int __txn_regop_log(logp, txnid, ret_lsnp, flags, ret = log_put(logp, ret_lsnp, (DBT *)&logrec, flags); if (txnid != NULL) txnid->last_lsn = *ret_lsnp; - free(logrec.data); + __db_free(logrec.data); return (ret); } @@ -103,7 +103,7 @@ __txn_regop_print(notused1, dbtp, lsnp, notused3, notused4) (u_long)argp->prev_lsn.offset); printf("\topcode: %lu\n", (u_long)argp->opcode); printf("\n"); - free(argp); + __db_free(argp); return (0); } @@ -118,7 +118,7 @@ __txn_regop_read(recbuf, argpp) __txn_regop_args *argp; u_int8_t *bp; - argp = (__txn_regop_args *)malloc(sizeof(__txn_regop_args) + + argp = (__txn_regop_args *)__db_malloc(sizeof(__txn_regop_args) + sizeof(DB_TXN)); if (argp == NULL) return (ENOMEM); @@ -167,7 +167,7 @@ int __txn_ckp_log(logp, txnid, ret_lsnp, flags, logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN) + sizeof(*ckp_lsn) + sizeof(*last_ckp); - if ((logrec.data = (void *)malloc(logrec.size)) == NULL) + if ((logrec.data = (void *)__db_malloc(logrec.size)) == NULL) return (ENOMEM); bp = logrec.data; @@ -194,7 +194,7 @@ int __txn_ckp_log(logp, txnid, ret_lsnp, flags, ret = log_put(logp, ret_lsnp, (DBT *)&logrec, flags); if (txnid != NULL) txnid->last_lsn = *ret_lsnp; - free(logrec.data); + __db_free(logrec.data); return (ret); } @@ -235,7 +235,7 @@ __txn_ckp_print(notused1, dbtp, lsnp, notused3, notused4) printf("\tlast_ckp: [%lu][%lu]\n", (u_long)argp->last_ckp.file, (u_long)argp->last_ckp.offset); printf("\n"); - free(argp); + __db_free(argp); return (0); } @@ -250,7 +250,7 @@ __txn_ckp_read(recbuf, argpp) __txn_ckp_args *argp; u_int8_t *bp; - argp = (__txn_ckp_args *)malloc(sizeof(__txn_ckp_args) + + argp = (__txn_ckp_args *)__db_malloc(sizeof(__txn_ckp_args) + sizeof(DB_TXN)); if (argp == NULL) return (ENOMEM); diff --git a/db2/txn/txn_rec.c b/db2/txn/txn_rec.c index c172d874d9..679cffb567 100644 --- a/db2/txn/txn_rec.c +++ b/db2/txn/txn_rec.c @@ -40,7 +40,7 @@ #include "config.h" #ifndef lint -static const char sccsid[] = "@(#)txn_rec.c 10.5 (Sleepycat) 8/27/97"; +static const char sccsid[] = "@(#)txn_rec.c 10.6 (Sleepycat) 10/25/97"; #endif /* not lint */ #ifndef NO_SYSTEM_INCLUDES @@ -97,7 +97,7 @@ __txn_regop_recover(logp, dbtp, lsnp, redo, info) } *lsnp = argp->prev_lsn; - free (argp); + __db_free(argp); return (0); } @@ -126,6 +126,6 @@ __txn_ckp_recover(logp, dbtp, lsnp, redo, info) return (ret); *lsnp = argp->last_ckp; - free(argp); + __db_free(argp); return (DB_TXN_CKP); } |