+++ /dev/null
-As posted to http://www.openldap.org/lists/openldap-devel/200610/msg00027.html
-
-This is Sleepycat bug #14908. The provided patch is for 4.2.52. The
-same bug is present in all versions up to 4.5.20 where it is fixed.
-
--------- Original Message --------
-Subject: region size bug Re: [BDB-Alpha] Berkeley DB 4.5.8 ALPHA
-Date: Mon, 10 Jul 2006 13:37:33 -0700
-From: Howard Chu <hyc@symas.com>
-To: support@sleepycat.com
-CC: support@symas.com
-References: <45A742B5-7DD5-4512-A204-A10FE8FC5DFC@oracle.com>
-
-
-I just ran into this in 4.2.52 but the same calculation occurs in 4.4
-and 4.5.8 alpha:
-
-This computation gives the wrong results when the number of cache
-regions is greater than the number of gigabytes (which we encounter on
-Linux using shared memory regions, which are constrained to much smaller
-than a gigabyte each).
-
-
-in mp/mp_region.c:
-
-
- roff_t reg_size;
-
-
- /* Figure out how big each cache region is. */
- reg_size = (roff_t)(dbenv->mp_gbytes / dbenv->mp_ncache) * GIGABYTE;
- reg_size += ((roff_t)(dbenv->mp_gbytes %
- dbenv->mp_ncache) * GIGABYTE) / dbenv->mp_ncache;
- reg_size += dbenv->mp_bytes / dbenv->mp_ncache;
- *reg_sizep = reg_size;
-
-
-The first reg_size calculation always goes to zero when mp_ncache >
-mp_gbytes.
-This should have been, instead:
- reg_size = GIGABYTE / dbenv->mp_ncache * dbenv->mp_gbytes;
-
---- mp/mp_region.c.O 2003-06-30 10:20:19.000000000 -0700
-+++ mp/mp_region.c 2006-10-27 23:25:05.000000000 -0700
-@@ -43,9 +43,7 @@
- int htab_buckets, ret;
-
- /* Figure out how big each cache region is. */
-- reg_size = (dbenv->mp_gbytes / dbenv->mp_ncache) * GIGABYTE;
-- reg_size += ((dbenv->mp_gbytes %
-- dbenv->mp_ncache) * GIGABYTE) / dbenv->mp_ncache;
-+ reg_size = GIGABYTE / dbenv->mp_ncache * dbenv->mp_gbytes;
- reg_size += dbenv->mp_bytes / dbenv->mp_ncache;
-
- /*