summaryrefslogtreecommitdiff
path: root/db
diff options
context:
space:
mode:
authorjbj <devnull@localhost>2002-11-15 18:28:01 +0000
committerjbj <devnull@localhost>2002-11-15 18:28:01 +0000
commit0b18a15516f26eaab58c1d53abe0b4039e02dd6b (patch)
tree5d017f1d8a875a983ce5411dad9a12602a04575f /db
parentc0e27af8c5dc9d209854ca9170995622652fc30c (diff)
downloadrpm-0b18a15516f26eaab58c1d53abe0b4039e02dd6b.tar.gz
rpm-0b18a15516f26eaab58c1d53abe0b4039e02dd6b.tar.bz2
rpm-0b18a15516f26eaab58c1d53abe0b4039e02dd6b.zip
Apply patch.4.1.24.4:
4.Fix a bug where read-only databases were not mapped into memory but were instead read through the Berkeley DB buffer cache. CVS patchset: 5867 CVS date: 2002/11/15 18:28:01
Diffstat (limited to 'db')
-rw-r--r--db/mp/mp_fopen.c35
1 files changed, 19 insertions, 16 deletions
diff --git a/db/mp/mp_fopen.c b/db/mp/mp_fopen.c
index 51b816431..d182f50e1 100644
--- a/db/mp/mp_fopen.c
+++ b/db/mp/mp_fopen.c
@@ -345,6 +345,23 @@ __memp_fopen_int(dbmfp, mfp, path, flags, mode, pagesize)
}
/*
+ * Figure out the file's size.
+ *
+ * !!!
+ * We can't use off_t's here, or in any code in the mainline library
+ * for that matter. (We have to use them in the os stubs, of course,
+ * as there are system calls that take them as arguments.) The reason
+ * is some customers build in environments where an off_t is 32-bits,
+ * but still run where offsets are 64-bits, and they pay us a lot of
+ * money.
+ */
+ if ((ret = __os_ioinfo(
+ dbenv, rpath, dbmfp->fhp, &mbytes, &bytes, NULL)) != 0) {
+ __db_err(dbenv, "%s: %s", rpath, db_strerror(ret));
+ goto err;
+ }
+
+ /*
* Get the file id if we weren't given one. Generated file id's
* don't use timestamps, otherwise there'd be no chance of any
* other process joining the party.
@@ -470,6 +487,7 @@ alloc: /* Allocate and initialize a new MPOOLFILE. */
F_SET(mfp, MP_DIRECT);
if (LF_ISSET(DB_EXTENT))
F_SET(mfp, MP_EXTENT);
+ F_SET(mfp, MP_CAN_MMAP);
if (path == NULL)
F_SET(mfp, MP_TEMP);
@@ -479,21 +497,6 @@ alloc: /* Allocate and initialize a new MPOOLFILE. */
* and find the number of the last page in the file, all the
* time being careful not to overflow 32 bits.
*
- * !!!
- * We can't use off_t's here, or in any code in the mainline
- * library for that matter. (We have to use them in the os
- * stubs, of course, as there are system calls that take them
- * as arguments.) The reason is that some customers build in
- * environments where an off_t is 32-bits, but still run where
- * offsets are 64-bits, and they pay us a lot of money.
- */
- if ((ret = __os_ioinfo(
- dbenv, rpath, dbmfp->fhp, &mbytes, &bytes, NULL)) != 0) {
- __db_err(dbenv, "%s: %s", rpath, db_strerror(ret));
- goto err;
- }
-
- /*
* During verify or recovery, we might have to cope with a
* truncated file; if the file size is not a multiple of the
* page size, round down to a page, we'll take care of the
@@ -582,7 +585,7 @@ check_map:
* compiler will perpetrate, doing the comparison in a portable way is
* flatly impossible. Hope that mmap fails if the file is too large.
*/
-#define DB_MAXMMAPSIZE (10 * 1024 * 1024) /* 10 Mb. */
+#define DB_MAXMMAPSIZE (10 * 1024 * 1024) /* 10 MB. */
if (F_ISSET(mfp, MP_CAN_MMAP)) {
if (path == NULL)
F_CLR(mfp, MP_CAN_MMAP);