]> git.ipfire.org Git - thirdparty/openldap.git/commitdiff
ITS#9118 add MAP_NOSYNC for FreeBSD
authorHoward Chu <hyc@openldap.org>
Fri, 15 Nov 2019 16:06:34 +0000 (16:06 +0000)
committerHoward Chu <hyc@openldap.org>
Fri, 15 Nov 2019 16:06:34 +0000 (16:06 +0000)
libraries/liblmdb/mdb.c

index f68542124ed00e80770635aca90cf8d509fcabad..bef7e25fa59dbf054235867756dfb3a5b659f789 100644 (file)
@@ -4396,22 +4396,27 @@ mdb_env_map(MDB_env *env, void *addr)
                return mdb_nt2win32(rc);
        env->me_map = map;
 #else
+       int mmap_flags = MAP_SHARED;
+       int prot = PROT_READ;
+#ifdef MAP_NOSYNC      /* Used on FreeBSD */
+       if (flags & MDB_NOSYNC)
+               mmap_flags |= MAP_NOSYNC;
+#endif
 #ifdef MDB_VL32
        (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;
                return ErrCode();
        }
 #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;