diff --git a/databases/db44/Makefile b/databases/db44/Makefile index d62c982ce940..3051b11843a4 100644 --- a/databases/db44/Makefile +++ b/databases/db44/Makefile @@ -15,29 +15,14 @@ PKGNAMESUFFIX?= DISTNAME= db-4.4.20 DIST_SUBDIR= bdb -PATCH_SITES= http://www.oracle.com/technology/products/berkeley-db/db/update/4.4.20/ -PATCHFILES= patch.4.4.20.1 patch.4.4.20.2 patch.4.4.20.3 patch.4.4.20.4 -PATCH_DIST_STRIP= -d .. -# * patch.4.4.20.1: ----------------------------------------------------------- -# Fix a bug that could cause a trap during recovery if multiple operations that -# could remove the same extent were recovered. [#14061] -# * patch.4.4.20.2: ----------------------------------------------------------- -# Fix a bug that could cause traps or hangs if the DB_TXN->set_name function is -# used in a multithreaded application. [#14033] -# * patch.4.4.20.3: ----------------------------------------------------------- -# Fix a bug where cursor lookups on secondary databases with off-page -# duplicates could fail. [#14240] -# * patch.4.4.20.4: ----------------------------------------------------------- -# Fix a bug where cache buffer retrieval could race with a checkpoint -# call, potentially causing database environment recovery to fail. [#14657] - MAINTAINER= mandree@FreeBSD.org COMMENT= The Berkeley DB package, revision 4.4 WRKSRC= ${WRKDIR}/${DISTNAME}/build_unix USE_LDCONFIG= yes -GNU_CONFIGURE= yes +GNU_CONFIGURE= yes +DEBUG_FLAGS= -g -O1 # need -O1 for inline assembly CONFIGURE_SCRIPT= ../dist/configure LIBTOOLFILES= ${CONFIGURE_SCRIPT} BDBVER= ${PORTVERSION:R:R} diff --git a/databases/db44/files/patch-dist::configure b/databases/db44/files/patch-dist::configure index 2dac99fc909d..5aceb834b77d 100644 --- a/databases/db44/files/patch-dist::configure +++ b/databases/db44/files/patch-dist::configure @@ -1,6 +1,6 @@ --- ../dist/configure.orig Wed Dec 5 13:14:02 2001 +++ ../dist/configure Wed Dec 5 13:24:01 2001 -@@ -20867,8 +20867,8 @@ +@@ -21657,8 +21657,8 @@ MAKEFILE_CC="\$(LIBTOOL) --mode=compile ${MAKEFILE_CC}" -MAKEFILE_SOLINK="\$(LIBTOOL) --mode=link ${MAKEFILE_CCLINK} -avoid-version" diff --git a/databases/db44/files/patch-upstream.4.4.20.1 b/databases/db44/files/patch-upstream.4.4.20.1 new file mode 100644 index 000000000000..bd7334747039 --- /dev/null +++ b/databases/db44/files/patch-upstream.4.4.20.1 @@ -0,0 +1,27 @@ +*** ../qam/qam_files.c.orig 2005-10-20 11:57:12.000000000 -0700 +--- ../qam/qam_files.c 2006-01-27 13:38:38.000000000 -0800 +*************** +*** 411,416 **** +--- 411,422 ---- + DB_APP_DATA, buf, 0, NULL, &real_name)) != 0) + goto err; + #endif ++ ++ mpf = array->mpfarray[offset].mpf; ++ /* This extent my already be marked for delete and closed. */ ++ if (mpf == NULL) ++ goto err; ++ + /* + * The log must be flushed before the file is deleted. We depend on + * the log record of the last delete to recreate the file if we crash. +*************** +*** 418,424 **** + if (LOGGING_ON(dbenv) && (ret = __log_flush(dbenv, NULL)) != 0) + goto err; + +- mpf = array->mpfarray[offset].mpf; + (void)__memp_set_flags(mpf, DB_MPOOL_UNLINK, 1); + /* Someone could be real slow, let them close it down. */ + if (array->mpfarray[offset].pinref != 0) +--- 424,429 ---- diff --git a/databases/db44/files/patch-upstream.4.4.20.2 b/databases/db44/files/patch-upstream.4.4.20.2 new file mode 100644 index 000000000000..dbcd69962bda --- /dev/null +++ b/databases/db44/files/patch-upstream.4.4.20.2 @@ -0,0 +1,29 @@ +*** ../txn/txn.c.orig Tue Nov 1 06:50:03 2005 +--- ../txn/txn.c Tue Jan 31 15:05:13 2006 +*************** +*** 1049,1060 **** +--- 1049,1062 ---- + return (ret); + memcpy(txn->name, name, len); + ++ TXN_SYSTEM_LOCK(dbenv); + if (td->name != INVALID_ROFF) { + __db_shalloc_free( + &mgr->reginfo, R_ADDR(&mgr->reginfo, td->name)); + td->name = INVALID_ROFF; + } + if ((ret = __db_shalloc(&mgr->reginfo, len, 0, &p)) != 0) { ++ TXN_SYSTEM_UNLOCK(dbenv); + __db_err(dbenv, + "Unable to allocate memory for transaction name"); + +*************** +*** 1063,1068 **** +--- 1065,1071 ---- + + return (ret); + } ++ TXN_SYSTEM_UNLOCK(dbenv); + td->name = R_OFFSET(&mgr->reginfo, p); + memcpy(p, name, len); + diff --git a/databases/db44/files/patch-upstream.4.4.20.3 b/databases/db44/files/patch-upstream.4.4.20.3 new file mode 100644 index 000000000000..d859c42a44c1 --- /dev/null +++ b/databases/db44/files/patch-upstream.4.4.20.3 @@ -0,0 +1,49 @@ +*** ../db/db_cam.c.orig 2006-01-11 03:19:21.000000000 +1100 +--- ../db/db_cam.c 2006-03-01 13:59:01.000000000 +1100 +*************** +*** 579,589 **** + flags == DB_NEXT || flags == DB_NEXT_DUP || flags == DB_PREV)) { + if (tmp_rmw && (ret = dbc_arg->c_am_writelock(dbc_arg)) != 0) + return (ret); +! if ((ret = __db_c_idup(cp->opd, &opd, DB_POSITION)) != 0) + return (ret); + +! switch (ret = +! opd->c_am_get(opd, key, data, flags, NULL)) { + case 0: + goto done; + case DB_NOTFOUND: +--- 579,590 ---- + flags == DB_NEXT || flags == DB_NEXT_DUP || flags == DB_PREV)) { + if (tmp_rmw && (ret = dbc_arg->c_am_writelock(dbc_arg)) != 0) + return (ret); +! if (F_ISSET(dbc_arg, DBC_TRANSIENT)) +! opd = cp->opd; +! else if ((ret = __db_c_idup(cp->opd, &opd, DB_POSITION)) != 0) + return (ret); + +! switch (ret = opd->c_am_get(opd, key, data, flags, NULL)) { + case 0: + goto done; + case DB_NOTFOUND: +*************** +*** 596,607 **** +--- 597,614 ---- + if ((ret = __db_c_close(opd)) != 0) + goto err; + opd = NULL; ++ if (F_ISSET(dbc_arg, DBC_TRANSIENT)) ++ cp->opd = NULL; + break; + } + goto err; + default: + goto err; + } ++ } else if (cp->opd != NULL && F_ISSET(dbc_arg, DBC_TRANSIENT)) { ++ if ((ret = __db_c_close(cp->opd)) != 0) ++ goto err; ++ cp->opd = NULL; + } + + /* diff --git a/databases/db44/files/patch-upstream.4.4.20.4 b/databases/db44/files/patch-upstream.4.4.20.4 new file mode 100644 index 000000000000..d6ee29d12d6a --- /dev/null +++ b/databases/db44/files/patch-upstream.4.4.20.4 @@ -0,0 +1,24 @@ +*** ../mp/mp_fget.c.orig 2005-10-12 10:53:36.000000000 -0700 +--- ../mp/mp_fget.c 2006-05-30 20:48:10.000000000 -0700 +*************** +*** 587,594 **** + */ + if (state != SECOND_MISS && bhp->ref == 1) { + bhp->priority = UINT32_MAX; +! SH_TAILQ_REMOVE(&hp->hash_bucket, bhp, hq, __bh); +! SH_TAILQ_INSERT_TAIL(&hp->hash_bucket, bhp, hq); + hp->hash_priority = + SH_TAILQ_FIRSTP(&hp->hash_bucket, __bh)->priority; + } +--- 587,597 ---- + */ + if (state != SECOND_MISS && bhp->ref == 1) { + bhp->priority = UINT32_MAX; +! if (SH_TAILQ_FIRST(&hp->hash_bucket, __bh) != +! SH_TAILQ_LAST(&hp->hash_bucket, hq, __bh)) { +! SH_TAILQ_REMOVE(&hp->hash_bucket, bhp, hq, __bh); +! SH_TAILQ_INSERT_TAIL(&hp->hash_bucket, bhp, hq); +! } + hp->hash_priority = + SH_TAILQ_FIRSTP(&hp->hash_bucket, __bh)->priority; + }