Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
When mmap-ing, ensute that offset is set to 0 if anon mmap
authorMatthieu Volat <mazhe@alkumuna.eu>
Mon, 7 Nov 2016 13:17:15 +0000 (14:17 +0100)
committerdegomme <augustin.degomme@unibas.ch>
Mon, 7 Nov 2016 13:33:23 +0000 (14:33 +0100)
Linux tolerate non-zero offset parameter (and ignore it),
but others do not.

src/xbt/mmalloc/mmorecore.c

index 5227d08..e876dd2 100644 (file)
                              ? -1                                 \
                              : (MDP) -> fd)
 
+/* Return 0if MDP uses anonymous mapping. Otherwise, return off */
+#define MAP_ANON_OR_OFFSET(MDP, off) (((MDP) -> flags & MMALLOC_ANONYMOUS) \
+                             ? 0                                           \
+                             : off)
+
 /** @brief Add memoty to this heap
  *
  *  Get core for the memory region specified by MDP, using SIZE as the
@@ -119,7 +124,7 @@ void *mmorecore(struct mdesc *mdp, ssize_t size)
        */
       mapto = mmap(mdp->top, mapbytes, PROT_READ | PROT_WRITE,
                    MAP_PRIVATE_OR_SHARED(mdp) | MAP_IS_ANONYMOUS(mdp) |
-                   MAP_FIXED, MAP_ANON_OR_FD(mdp), foffset);
+                   MAP_FIXED, MAP_ANON_OR_FD(mdp), MAP_ANON_OR_OFFSET(mdp, foffset));
 
       if (mapto == MAP_FAILED) {
         char buff[1024];