rpms/db4/F-8 patch.4.6.21.1, NONE, 1.1 patch.4.6.21.2, NONE, 1.1 db4.spec, 1.53, 1.54

Jindrich Novy (jnovy) fedora-extras-commits at redhat.com
Wed Jun 25 10:32:44 UTC 2008


Author: jnovy

Update of /cvs/extras/rpms/db4/F-8
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv9558

Modified Files:
	db4.spec 
Added Files:
	patch.4.6.21.1 patch.4.6.21.2 
Log Message:
* Wed Jun 25 2008 Jindrich Novy <jnovy at redhat.com> 4.6.21-2
- add upstream patch to fix potentially wrong number of mutexes
  to be allocated
- add upstream patch to fix a race condition between checkpoint
  and DB->close which can result in the checkpoint thread self-deadlocking
- don't list headers twice in filelist (#436701)



--- 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;



--- NEW FILE patch.4.6.21.2 ---
*** mp/mp_region.c	2007-05-18 03:18:01.000000000 +1000
--- mp/mp_region.c	2008-06-24 13:15:56.000000000 +1000
***************
*** 249,256 ****
  		mtx_base = htab[0].mtx_hash;
  	}
  
  	if (mtx_base != MUTEX_INVALID)
! 		mtx_base += reginfo_off * htab_buckets;
  
  	/* Allocate hash table space and initialize it. */
  	if ((ret = __env_alloc(infop,
--- 249,262 ----
  		mtx_base = htab[0].mtx_hash;
  	}
  
+ 	/*
+ 	 * We preallocated all of the mutexes in a block, so for regions after
+ 	 * the first, we skip mutexes in use in earlier regions.  Each region
+ 	 * has the same number of buckets and there are two mutexes per hash
+ 	 * bucket (the bucket mutex and the I/O mutex).
+ 	 */
  	if (mtx_base != MUTEX_INVALID)
! 		mtx_base += reginfo_off * htab_buckets * 2;
  
  	/* Allocate hash table space and initialize it. */
  	if ((ret = __env_alloc(infop,


Index: db4.spec
===================================================================
RCS file: /cvs/extras/rpms/db4/F-8/db4.spec,v
retrieving revision 1.53
retrieving revision 1.54
diff -u -r1.53 -r1.54
--- db4.spec	11 Oct 2007 13:52:59 -0000	1.53
+++ db4.spec	25 Jun 2008 10:30:13 -0000	1.54
@@ -8,10 +8,12 @@
 Summary: The Berkeley DB database library (version 4) for C
 Name: db4
 Version: 4.6.21
-Release: 1%{?dist}
+Release: 2%{?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/db/update/4.6.21/patch.4.6.21.1
 Patch2: db-4.3.29-sparc64.patch
+Patch3: http://www.oracle.com/technology/products/berkeley-db/db/update/4.6.21/patch.4.6.21.2
 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
 Patch12: http://www.oracle.com/technology/products/berkeley-db/db/update/1.85/patch.1.3
@@ -106,7 +108,9 @@
 
 %prep
 %setup -q -n db-%{version} -a 1
+%patch1 -p0 -b .4.6.21.1
 %patch2 -p1 -b .sparc64
+%patch3 -p0 -b .4.6.21.2
 
 pushd dist
 libtoolize --copy --force
@@ -326,7 +330,7 @@
 %{_libdir}/libdb_cxx.so
 %{_libdir}/libdb_cxx-%{__soversion}.la
 %{_libdir}/%{_libcxx_a}
-%{_includedir}/%{name}
+%dir %{_includedir}/%{name}
 %{_includedir}/%{name}/db.h
 %{_includedir}/%{name}/db_185.h
 %{_includedir}/%{name}/db_cxx.h
@@ -350,6 +354,13 @@
 %endif
 
 %changelog
+* Wed Jun 25 2008 Jindrich Novy <jnovy at redhat.com> 4.6.21-2
+- add upstream patch to fix potentially wrong number of mutexes
+  to be allocated
+- add upstream patch to fix a race condition between checkpoint
+  and DB->close which can result in the checkpoint thread self-deadlocking
+- don't list headers twice in filelist (#436701)
+
 * Thu Oct 11 2007 Jindrich Novy <jnovy at redhat.com> 4.6.21-1
 - update to 4.6.21
 - own %%{_includedir}/db4 (#274251)




More information about the fedora-extras-commits mailing list