ITS#9118 add MAP_NOSYNC for FreeBSD

mdb.master3
Howard Chu 5 years ago
parent 4bdf8bf5e3
commit 37e99c2b9d
  1. 11
      libraries/liblmdb/mdb.c

@ -4707,9 +4707,15 @@ mdb_env_map(MDB_env *env, void *addr)
return mdb_nt2win32(rc); return mdb_nt2win32(rc);
env->me_map = map; env->me_map = map;
#else /* !_WIN32 */ #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)) { if (MDB_REMAPPING(env->me_flags)) {
(void) 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); env->me_fd, 0);
if (env->me_map == MAP_FAILED) { if (env->me_map == MAP_FAILED) {
env->me_map = NULL; env->me_map = NULL;
@ -4717,13 +4723,12 @@ mdb_env_map(MDB_env *env, void *addr)
} }
} else } else
{ {
int prot = PROT_READ;
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;

Loading…
Cancel
Save