|
|
@ -4010,13 +4010,18 @@ mdb_env_map(MDB_env *env, void *addr) |
|
|
|
if (rc) |
|
|
|
if (rc) |
|
|
|
return rc; |
|
|
|
return rc; |
|
|
|
#else |
|
|
|
#else |
|
|
|
|
|
|
|
int mmap_flags = MAP_SHARED: |
|
|
|
int prot = PROT_READ; |
|
|
|
int prot = PROT_READ; |
|
|
|
|
|
|
|
#ifdef MAP_NOSYNC /* Used on FreeBSD */ |
|
|
|
|
|
|
|
if (flags & MDB_NOSYNC) |
|
|
|
|
|
|
|
mmap_flags |= MAP_NOSYNC; |
|
|
|
|
|
|
|
#endif |
|
|
|
if (flags & MDB_WRITEMAP) { |
|
|
|
if (flags & MDB_WRITEMAP) { |
|
|
|
prot |= PROT_WRITE; |
|
|
|
prot |= PROT_WRITE; |
|
|
|
if (ftruncate(env->me_fd, env->me_mapsize) < 0) |
|
|
|
if (ftruncate(env->me_fd, env->me_mapsize) < 0) |
|
|
|
return ErrCode(); |
|
|
|
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); |
|
|
|
env->me_fd, 0); |
|
|
|
if (env->me_map == MAP_FAILED) { |
|
|
|
if (env->me_map == MAP_FAILED) { |
|
|
|
env->me_map = NULL; |
|
|
|
env->me_map = NULL; |
|
|
|