Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Use pthread mutex instead of semaphore in mm
authorGabriel Corona <gabriel.corona@loria.fr>
Thu, 27 Nov 2014 10:25:22 +0000 (11:25 +0100)
committerGabriel Corona <gabriel.corona@loria.fr>
Mon, 1 Dec 2014 11:22:42 +0000 (12:22 +0100)
src/xbt/mmalloc/mm_module.c
src/xbt/mmalloc/mmprivate.h

index affa209..86c3421 100644 (file)
@@ -137,7 +137,7 @@ xbt_mheap_t xbt_mheap_new_options(int fd, void *baseaddr, int options)
         mdptr = (struct mdesc *) newmd.base;
         mdptr->fd = fd;
         if(!mdptr->refcount){
         mdptr = (struct mdesc *) newmd.base;
         mdptr->fd = fd;
         if(!mdptr->refcount){
-          sem_init(&mdptr->sem, 0, 1);
+          pthread_mutex_init(&mdptr->mutex, NULL);
           mdptr->refcount++;
         }
       }
           mdptr->refcount++;
         }
       }
@@ -182,8 +182,7 @@ xbt_mheap_t xbt_mheap_new_options(int fd, void *baseaddr, int options)
   if (mdp->fd < 0){
     mdp->flags |= MMALLOC_ANONYMOUS;
   }
   if (mdp->fd < 0){
     mdp->flags |= MMALLOC_ANONYMOUS;
   }
-  sem_init(&mdp->sem, 0, 1);
-  
+  pthread_mutex_init(&mdp->mutex, NULL);
   /* If we have not been passed a valid open file descriptor for the file
      to map to, then open /dev/zero and use that to map to. */
 
   /* If we have not been passed a valid open file descriptor for the file
      to map to, then open /dev/zero and use that to map to. */
 
@@ -225,8 +224,7 @@ void xbt_mheap_destroy_no_free(xbt_mheap_t md)
   struct mdesc *mdp = md;
 
   if(--mdp->refcount == 0){
   struct mdesc *mdp = md;
 
   if(--mdp->refcount == 0){
-    LOCK(mdp) ;
-    sem_destroy(&mdp->sem);
+    pthread_mutex_destroy(&mdp->mutex);
   }
 }
 
   }
 }
 
index 09cb4be..c652e41 100644 (file)
@@ -20,7 +20,8 @@
 #include "xbt/ex.h"
 #include "xbt/dynar.h"
 #include "xbt/swag.h"
 #include "xbt/ex.h"
 #include "xbt/dynar.h"
 #include "xbt/swag.h"
-#include <semaphore.h>
+
+#include <pthread.h>
 #include <stdint.h>
 
 #ifdef HAVE_LIMITS_H
 #include <stdint.h>
 
 #ifdef HAVE_LIMITS_H
@@ -190,8 +191,8 @@ typedef struct {
  * */
 struct mdesc {
 
  * */
 struct mdesc {
 
-  /** @brief Semaphore locking the access to the heap */
-  sem_t sem;
+  /** @brief Mutex locking the access to the heap */
+  pthread_mutex_t mutex;
 
   /** @brief Number of processes that attached the heap */
   unsigned int refcount;
 
   /** @brief Number of processes that attached the heap */
   unsigned int refcount;
@@ -293,14 +294,14 @@ XBT_PUBLIC( void *)__mmalloc_remap_core(xbt_mheap_t mdp);
 
 XBT_PUBLIC( void *)mmorecore(struct mdesc *mdp, ssize_t size);
 
 
 XBT_PUBLIC( void *)mmorecore(struct mdesc *mdp, ssize_t size);
 
-/* Thread-safety (if the sem is already created)
+/** Thread-safety (if the mutex is already created)
  *
  * This is mandatory in the case where the user runs a parallel simulation
  * in a model-checking enabled tree. Without this protection, our malloc
  * implementation will not like multi-threading AT ALL.
  */
  *
  * This is mandatory in the case where the user runs a parallel simulation
  * in a model-checking enabled tree. Without this protection, our malloc
  * implementation will not like multi-threading AT ALL.
  */
-#define LOCK(mdp) sem_wait(&mdp->sem)
-#define UNLOCK(mdp) sem_post(&mdp->sem)
+#define LOCK(mdp) pthread_mutex_lock(&mdp->mutex)
+#define UNLOCK(mdp) pthread_mutex_unlock(&mdp->mutex)
 
 static XBT_INLINE void  mmalloc_paranoia(struct mdesc *mdp){
 
 
 static XBT_INLINE void  mmalloc_paranoia(struct mdesc *mdp){