Author: jhuntwork Date: 2008-04-02 20:10:31 -0600 (Wed, 02 Apr 2008) New Revision: 1934
Added: trunk/db/db-4.6.21-fixes-1.patch Log: Add an upstream patch for db-4.6.21. Thanks to Randy McMurchy for spotting it. Added: trunk/db/db-4.6.21-fixes-1.patch =================================================================== --- trunk/db/db-4.6.21-fixes-1.patch (rev 0) +++ trunk/db/db-4.6.21-fixes-1.patch 2008-04-03 02:10:31 UTC (rev 1934) @@ -0,0 +1,68 @@ +Submitted By: Jeremy Huntwork (jhuntwork at linuxfromscratch dot org) +Date: 2008-04-02 +Initial Package Version: 4.6.21 +Upstream Status: From Upstream +Origin: http://www.oracle.com/technology/products/berkeley-db/xml/update/4.6.21/patch.4.6.21.html +Description: "Fixes a race condition between checkpoint and DB->close which can +result in the checkpoint thread self-deadlocking." + +diff -Naur db-4.6.21-orig/dbinc/mp.h db-4.6.21/dbinc/mp.h +--- db-4.6.21-orig/dbinc/mp.h 2007-09-27 11:28:25.000000000 -0400 ++++ db-4.6.21/dbinc/mp.h 2008-04-02 22:22:33.000000000 -0400 +@@ -639,6 +639,9 @@ + */ + #define MP_TRUNC_RECOVER 0x01 + ++/* Private flags to DB_MPOOLFILE->close. */ ++#define DB_MPOOL_NOLOCK 0x002 /* Already have mpf locked. */ ++ + #if defined(__cplusplus) + } + #endif +diff -Naur db-4.6.21-orig/mp/mp_fopen.c db-4.6.21/mp/mp_fopen.c +--- db-4.6.21-orig/mp/mp_fopen.c 2007-05-17 13:18:01.000000000 -0400 ++++ db-4.6.21/mp/mp_fopen.c 2008-04-02 22:22:33.000000000 -0400 +@@ -888,7 +888,8 @@ + * when we try to flush them. + */ + deleted = 0; +- MUTEX_LOCK(dbenv, mfp->mutex); ++ if (!LF_ISSET(DB_MPOOL_NOLOCK)) ++ MUTEX_LOCK(dbenv, mfp->mutex); + if (F_ISSET(dbmfp, MP_MULTIVERSION)) + --mfp->multiversion; + if (--mfp->mpf_cnt == 0 || LF_ISSET(DB_MPOOL_DISCARD)) { +@@ -909,13 +910,19 @@ + } + } + if (mfp->block_cnt == 0) { ++ /* ++ * We should never discard this mp file if our caller ++ * is holding the lock on it. See comment in ++ * __memp_sync_file. ++ */ ++ DB_ASSERT(dbenv, !LF_ISSET(DB_MPOOL_NOLOCK)); + if ((t_ret = + __memp_mf_discard(dbmp, mfp)) != 0 && ret == 0) + ret = t_ret; + deleted = 1; + } + } +- if (!deleted) ++ if (!deleted && !LF_ISSET(DB_MPOOL_NOLOCK)) + MUTEX_UNLOCK(dbenv, mfp->mutex); + + done: /* Discard the DB_MPOOLFILE structure. */ +diff -Naur db-4.6.21-orig/mp/mp_sync.c db-4.6.21/mp/mp_sync.c +--- db-4.6.21-orig/mp/mp_sync.c 2007-06-01 14:32:44.000000000 -0400 ++++ db-4.6.21/mp/mp_sync.c 2008-04-02 22:22:33.000000000 -0400 +@@ -755,7 +755,8 @@ + * This is important since we are called with the hash bucket + * locked. The mfp will get freed via the cleanup pass. + */ +- if (dbmfp != NULL && (t_ret = __memp_fclose(dbmfp, 0)) != 0 && ret == 0) ++ if (dbmfp != NULL && ++ (t_ret = __memp_fclose(dbmfp, DB_MPOOL_NOLOCK)) != 0 && ret == 0) + ret = t_ret; + + --mfp->mpf_cnt; -- http://linuxfromscratch.org/mailman/listinfo/patches FAQ: http://www.linuxfromscratch.org/faq/ Unsubscribe: See the above information page
