mdbx: fix madvise() flags, it is not a bitmask.

Change-Id: Ie5109779dc596190c467dcd6e84a1684e71575f5
This commit is contained in:
Leo Yuriev 2016-02-04 06:22:36 +03:00
parent 0e508f0d3b
commit 425ac1cde6

19
mdb.c
View File

@ -4288,15 +4288,24 @@ mdb_env_map(MDB_env *env, void *addr)
return errno; return errno;
} }
unsigned madvise_flags = MADV_DONTFORK; if (flags & MDB_NORDAHEAD) {
if (flags & MDB_NORDAHEAD)
/* Turn off readahead. It's harmful when the DB is larger than RAM. */ /* Turn off readahead. It's harmful when the DB is larger than RAM. */
madvise_flags |= MADV_RANDOM; if (madvise(env->me_map, env->me_mapsize, MADV_RANDOM) < 0)
if (madvise(env->me_map, env->me_mapsize, madvise_flags)) return errno;
}
if (madvise(env->me_map, env->me_mapsize, MADV_DONTFORK) < 0)
return errno; return errno;
if (madvise(env->me_map, env->me_mapsize, MADV_WILLNEED) < 0)
return errno;
#ifdef MADV_NOHUGEPAGE
(void) madvise(env->me_map, env->me_mapsize, MADV_NOHUGEPAGE);
#endif
#ifdef MADV_DONTDUMP #ifdef MADV_DONTDUMP
madvise(env->me_map, env->me_mapsize, MADV_DONTDUMP); (void) madvise(env->me_map, env->me_mapsize, MADV_DONTDUMP);
#endif #endif
/* Can happen because the address argument to mmap() is just a /* Can happen because the address argument to mmap() is just a