Author: dnicholson Date: 2006-08-03 08:44:39 -0600 (Thu, 03 Aug 2006) New Revision: 1617
Added: trunk/db/db-4.4.20-fixes-1.patch Log: BDB patch containing all available upstream fixes. Added: trunk/db/db-4.4.20-fixes-1.patch =================================================================== --- trunk/db/db-4.4.20-fixes-1.patch (rev 0) +++ trunk/db/db-4.4.20-fixes-1.patch 2006-08-03 14:44:39 UTC (rev 1617) @@ -0,0 +1,111 @@ +Submitted By: Dan Nicholson <dnicholson AT linuxfromscratch DOT org> +Date: 2006-09-02 +Initial Package Version: 4.4.20 +Origin: Upstream - http://www.sleepycat.com/update/4.4.20/patch.4.4.20.html +Description: Bug fixes provided by the developer. Contains patches 1-4. + +diff -pNur db-4.4.20.orig/db/db_cam.c db-4.4.20/db/db_cam.c +--- db-4.4.20.orig/db/db_cam.c 2006-01-10 16:19:21.000000000 +0000 ++++ db-4.4.20/db/db_cam.c 2006-08-03 14:31:20.220319610 +0000 +@@ -579,11 +579,12 @@ __db_c_get(dbc_arg, key, data, flags) + 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) ++ 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)) { ++ switch (ret = opd->c_am_get(opd, key, data, flags, NULL)) { + case 0: + goto done; + case DB_NOTFOUND: +@@ -596,12 +597,18 @@ __db_c_get(dbc_arg, key, data, flags) + 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 -pNur db-4.4.20.orig/mp/mp_fget.c db-4.4.20/mp/mp_fget.c +--- db-4.4.20.orig/mp/mp_fget.c 2005-10-12 17:53:36.000000000 +0000 ++++ db-4.4.20/mp/mp_fget.c 2006-08-03 14:31:20.223318410 +0000 +@@ -587,8 +587,11 @@ alloc: /* + */ + 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); ++ 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; + } +diff -pNur db-4.4.20.orig/qam/qam_files.c db-4.4.20/qam/qam_files.c +--- db-4.4.20.orig/qam/qam_files.c 2005-10-20 18:57:12.000000000 +0000 ++++ db-4.4.20/qam/qam_files.c 2006-08-03 14:31:20.211323209 +0000 +@@ -411,6 +411,12 @@ __qam_fremove(dbp, pgnoaddr) + 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,7 +424,6 @@ __qam_fremove(dbp, pgnoaddr) + 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) +diff -pNur db-4.4.20.orig/txn/txn.c db-4.4.20/txn/txn.c +--- db-4.4.20.orig/txn/txn.c 2005-11-01 14:50:03.000000000 +0000 ++++ db-4.4.20/txn/txn.c 2006-08-03 14:31:20.215321609 +0000 +@@ -1049,12 +1049,14 @@ __txn_set_name(txn, name) + 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,6 +1065,7 @@ __txn_set_name(txn, name) + + return (ret); + } ++ TXN_SYSTEM_UNLOCK(dbenv); + td->name = R_OFFSET(&mgr->reginfo, p); + memcpy(p, name, len); + -- http://linuxfromscratch.org/mailman/listinfo/patches FAQ: http://www.linuxfromscratch.org/faq/ Unsubscribe: See the above information page
