]> 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>
Sat, 10 Oct 2020 12:30:09 +0000 (13:30 +0100)
libraries/liblmdb/mdb.c

index a621046167953851f36acb034e91fd9066d95f0b..13afa0c37af3a5cbd352718eba4c72660a374ce9 100644 (file)
@@ -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;