Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Revert "Remove XBT_INFO call"
[simgrid.git] / src / xbt / mmalloc / mmorecore.c
index 197341d..74ed341 100644 (file)
@@ -3,7 +3,7 @@
 
    Contributed by Fred Fish at Cygnus Support.   fnf@cygnus.com */
 
-/* Copyright (c) 2010-2012. The SimGrid Team.
+/* Copyright (c) 2010-2014. The SimGrid Team.
  * All rights reserved.                                                     */
 
 /* This program is free software; you can redistribute it and/or modify it
 #include <stdio.h>
 #include <fcntl.h>
 #include <sys/mman.h>
+#include <sys/wait.h>
 
 #include "mmprivate.h"
 
-/* Cache the pagesize for the current host machine.  Note that if the host
-   does not readily provide a getpagesize() function, we need to emulate it
-   elsewhere, not clutter up this file with lots of kluges to try to figure
-   it out. */
-
-static size_t pagesize;
-
-#define PAGE_ALIGN(addr) (void*) (((long)(addr) + pagesize - 1) & \
-                                  ~(pagesize - 1))
+#define PAGE_ALIGN(addr) (void*) (((long)(addr) + xbt_pagesize - 1) &   \
+                                  ~((long)xbt_pagesize - 1))
 
 /* Return MAP_PRIVATE if MDP represents /dev/zero.  Otherwise, return
    MAP_SHARED.  */
@@ -65,8 +59,6 @@ void *mmorecore(struct mdesc *mdp, ssize_t size)
   char buf = 0;                 /* Single byte to write to extend mapped file */
 
 //  fprintf(stderr,"increase %p by %u\n",mdp,size);
-  if (pagesize == 0)
-    pagesize = getpagesize();
 
   if (size == 0) {
     /* Just return the current "break" value. */
@@ -131,6 +123,10 @@ void *mmorecore(struct mdesc *mdp, ssize_t size)
         abort();
       }
 
+#ifdef MADV_MERGEABLE
+      madvise(mapto, mapbytes, MADV_MERGEABLE);
+#endif
+
       if (mdp->top == 0)
         mdp->base = mdp->breakval = mapto;