|
|
|
@ -4707,9 +4707,15 @@ mdb_env_map(MDB_env *env, void *addr) |
|
|
|
|
return mdb_nt2win32(rc); |
|
|
|
|
env->me_map = map; |
|
|
|
|
#else /* !_WIN32 */ |
|
|
|
|
int mmap_flags = MAP_SHARED; |
|
|
|
|
int prot = PROT_READ; |
|
|
|
|
#ifdef MAP_NOSYNC /* Used on FreeBSD */ |
|
|
|
|
if (flags & MDB_NOSYNC) |
|
|
|
|
mmap_flags |= MAP_NOSYNC; |
|
|
|
|
#endif |
|
|
|
|
if (MDB_REMAPPING(env->me_flags)) { |
|
|
|
|
(void) flags; |
|
|
|
|
env->me_map = mmap(addr, NUM_METAS * env->me_psize, PROT_READ, MAP_SHARED, |
|
|
|
|
env->me_map = mmap(addr, NUM_METAS * env->me_psize, prot, mmap_flags, |
|
|
|
|
env->me_fd, 0); |
|
|
|
|
if (env->me_map == MAP_FAILED) { |
|
|
|
|
env->me_map = NULL; |
|
|
|
@ -4717,13 +4723,12 @@ mdb_env_map(MDB_env *env, void *addr) |
|
|
|
|
} |
|
|
|
|
} else |
|
|
|
|
{ |
|
|
|
|
int prot = PROT_READ; |
|
|
|
|
if (flags & MDB_WRITEMAP) { |
|
|
|
|
prot |= PROT_WRITE; |
|
|
|
|
if (ftruncate(env->me_fd, env->me_mapsize) < 0) |
|
|
|
|
return ErrCode(); |
|
|
|
|
} |
|
|
|
|
env->me_map = mmap(addr, env->me_mapsize, prot, MAP_SHARED, |
|
|
|
|
env->me_map = mmap(addr, env->me_mapsize, prot, mmap_flags, |
|
|
|
|
env->me_fd, 0); |
|
|
|
|
if (env->me_map == MAP_FAILED) { |
|
|
|
|
env->me_map = NULL; |
|
|
|
|