diff options
author | jbj <devnull@localhost> | 2002-11-15 18:28:01 +0000 |
---|---|---|
committer | jbj <devnull@localhost> | 2002-11-15 18:28:01 +0000 |
commit | 0b18a15516f26eaab58c1d53abe0b4039e02dd6b (patch) | |
tree | 5d017f1d8a875a983ce5411dad9a12602a04575f /db | |
parent | c0e27af8c5dc9d209854ca9170995622652fc30c (diff) | |
download | rpm-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.c | 35 |
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); |