mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-12-27 01:59:38 -05:00
MDB_VL32 - fix for Win32 read-only envs
We can't map with MEM_RESERVE because that requires write access to the underlying file/section. Mapping with the default (MEM_COMMIT) requires that we don't map past the end of the file.
This commit is contained in:
parent
3a2ac24f5b
commit
5eb25c5cb9
1 changed files with 7 additions and 3 deletions
|
|
@ -5689,7 +5689,7 @@ mdb_rpage_get(MDB_txn *txn, pgno_t pg0, MDB_page **ret)
|
|||
#define MAP(rc,env,addr,len,off) \
|
||||
addr = NULL; \
|
||||
rc = NtMapViewOfSection(env->me_fmh, GetCurrentProcess(), &addr, 0, \
|
||||
len, &off, &len, ViewUnmap, MEM_RESERVE, PAGE_READONLY)
|
||||
len, &off, &len, ViewUnmap, (env->me_flags & MDB_RDONLY) ? 0 : MEM_RESERVE, PAGE_READONLY)
|
||||
#else
|
||||
off_t off;
|
||||
size_t len;
|
||||
|
|
@ -5803,9 +5803,13 @@ retry:
|
|||
id3.mref = 1;
|
||||
if (id3.mid)
|
||||
goto found;
|
||||
len = env->me_psize * MDB_RPAGE_CHUNK;
|
||||
/* don't map past last written page */
|
||||
if (pgno + MDB_RPAGE_CHUNK-1 > txn->mt_last_pgno)
|
||||
id3.mcnt = txn->mt_last_pgno + 1 - pgno;
|
||||
else
|
||||
id3.mcnt = MDB_RPAGE_CHUNK;
|
||||
len = id3.mcnt * env->me_psize;
|
||||
id3.mid = pgno;
|
||||
id3.mcnt = MDB_RPAGE_CHUNK;
|
||||
|
||||
/* search for page in env */
|
||||
LOCK_MUTEX0(env->me_rpmutex);
|
||||
|
|
|
|||
Loading…
Reference in a new issue