mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-02-05 13:40:08 +08:00
Tweak MDB_FIXEDMAP handling.
Drop mmap()'s MAP_FIXED flag, so it returns another address instead of unmapping existing overlapping pages. Verify the returned address.
This commit is contained in:
parent
52e3adbdec
commit
0201b9002c
@ -2651,8 +2651,6 @@ mdb_env_open2(MDB_env *env)
|
||||
}
|
||||
#else
|
||||
i = MAP_SHARED;
|
||||
if (meta.mm_address && (flags & MDB_FIXEDMAP))
|
||||
i |= MAP_FIXED;
|
||||
prot = PROT_READ;
|
||||
if (flags & MDB_WRITEMAP) {
|
||||
prot |= PROT_WRITE;
|
||||
@ -2674,6 +2672,13 @@ mdb_env_open2(MDB_env *env)
|
||||
if (i != MDB_SUCCESS) {
|
||||
return i;
|
||||
}
|
||||
} else if (meta.mm_address && env->me_map != meta.mm_address) {
|
||||
/* Can happen because the address argument to mmap() is just a
|
||||
* hint. mmap() can pick another, e.g. if the range is in use.
|
||||
* The MAP_FIXED flag would prevent that, but then mmap could
|
||||
* instead unmap existing pages to make room for the new map.
|
||||
*/
|
||||
return EBUSY; /* TODO: Make a new MDB_* error code? */
|
||||
}
|
||||
env->me_psize = meta.mm_psize;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user