Commit 0201b900 authored by Hallvard Furuseth's avatar Hallvard Furuseth
Browse files

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.
parent 52e3adbd
......@@ -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;
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment