rpms/db4/devel patch.4.6.21.1,NONE,1.1 db4.spec,1.56,1.57

Jindrich Novy (jnovy) fedora-extras-commits at redhat.com
Fri Apr 4 08:33:43 UTC 2008


Author: jnovy

Update of /cvs/extras/rpms/db4/devel
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv26736

Modified Files:
	db4.spec 
Added Files:
	patch.4.6.21.1 
Log Message:
* Fri Apr  3 2008 Jindrich Novy <jnovy at redhat.com> 4.6.21-5
- add upstream patch to fix a race condition between checkpoint
  and DB->close which can result in the checkpoint thread self-deadlocking



--- NEW FILE patch.4.6.21.1 ---
*** dbinc/mp.h	2007-09-28 01:28:25.000000000 +1000
--- dbinc/mp.h	2008-02-14 01:22:09.000000000 +1100
***************
*** 639,644 ****
--- 639,647 ----
   */
  #define	MP_TRUNC_RECOVER	0x01
  
+ /* Private flags to DB_MPOOLFILE->close. */
+ #define	DB_MPOOL_NOLOCK		0x002	/* Already have mpf locked. */
+ 
  #if defined(__cplusplus)
  }
  #endif
*** mp/mp_fopen.c	2007-05-18 03:18:01.000000000 +1000
--- mp/mp_fopen.c	2008-02-12 16:09:42.000000000 +1100
***************
*** 888,894 ****
  	 * when we try to flush them.
  	 */
  	deleted = 0;
! 	MUTEX_LOCK(dbenv, mfp->mutex);
  	if (F_ISSET(dbmfp, MP_MULTIVERSION))
  		--mfp->multiversion;
  	if (--mfp->mpf_cnt == 0 || LF_ISSET(DB_MPOOL_DISCARD)) {
--- 888,895 ----
  	 * when we try to flush them.
  	 */
  	deleted = 0;
! 	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,921 ****
  			}
  		}
  		if (mfp->block_cnt == 0) {
  			if ((t_ret =
  			    __memp_mf_discard(dbmp, mfp)) != 0 && ret == 0)
  				ret = t_ret;
  			deleted = 1;
  		}
  	}
! 	if (!deleted)
  		MUTEX_UNLOCK(dbenv, mfp->mutex);
  
  done:	/* Discard the DB_MPOOLFILE structure. */
--- 910,928 ----
  			}
  		}
  		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 && !LF_ISSET(DB_MPOOL_NOLOCK))
  		MUTEX_UNLOCK(dbenv, mfp->mutex);
  
  done:	/* Discard the DB_MPOOLFILE structure. */
*** mp/mp_sync.c	2007-06-02 04:32:44.000000000 +1000
--- mp/mp_sync.c	2008-02-12 16:09:42.000000000 +1100
***************
*** 755,761 ****
  	 * 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)
  		ret = t_ret;
  
  	--mfp->mpf_cnt;
--- 755,762 ----
  	 * 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, DB_MPOOL_NOLOCK)) != 0 && ret == 0)
  		ret = t_ret;
  
  	--mfp->mpf_cnt;



Index: db4.spec
===================================================================
RCS file: /cvs/extras/rpms/db4/devel/db4.spec,v
retrieving revision 1.56
retrieving revision 1.57
diff -u -r1.56 -r1.57
--- db4.spec	10 Mar 2008 07:38:58 -0000	1.56
+++ db4.spec	4 Apr 2008 08:32:54 -0000	1.57
@@ -8,9 +8,10 @@
 Summary: The Berkeley DB database library (version 4) for C
 Name: db4
 Version: 4.6.21
-Release: 4%{?dist}
+Release: 5%{?dist}
 Source0: http://download.oracle.com/berkeley-db/db-%{version}.tar.gz
 Source1: http://download.oracle.com/berkeley-db/db.1.85.tar.gz
+Patch1: http://www.oracle.com/technology/products/berkeley-db/xml/update/4.6.21/patch.4.6.21.1
 Patch2: db-4.3.29-sparc64.patch
 Patch10: http://www.oracle.com/technology/products/berkeley-db/db/update/1.85/patch.1.1
 Patch11: http://www.oracle.com/technology/products/berkeley-db/db/update/1.85/patch.1.2
@@ -106,6 +107,7 @@
 
 %prep
 %setup -q -n db-%{version} -a 1
+%patch1 -p0 -b .4.6.21.1
 %patch2 -p1 -b .sparc64
 
 pushd dist
@@ -350,6 +352,10 @@
 %endif
 
 %changelog
+* Fri Apr  3 2008 Jindrich Novy <jnovy at redhat.com> 4.6.21-5
+- add upstream patch to fix a race condition between checkpoint
+  and DB->close which can result in the checkpoint thread self-deadlocking
+
 * Mon Mar 10 2008 Jindrich Novy <jnovy at redhat.com> 4.6.21-4
 - don't list headers twice in filelist (#436701)
 




More information about the fedora-extras-commits mailing list