From e14c9299b7ebe3fe12a6eeb51c2a8e5bbd847d28 Mon Sep 17 00:00:00 2001 From: Gabriel Corona Date: Thu, 27 Nov 2014 11:25:22 +0100 Subject: [PATCH] Use pthread mutex instead of semaphore in mm --- src/xbt/mmalloc/mm_module.c | 8 +++----- src/xbt/mmalloc/mmprivate.h | 13 +++++++------ 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/src/xbt/mmalloc/mm_module.c b/src/xbt/mmalloc/mm_module.c index affa209c30..86c342163b 100644 --- a/src/xbt/mmalloc/mm_module.c +++ b/src/xbt/mmalloc/mm_module.c @@ -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){ - sem_init(&mdptr->sem, 0, 1); + pthread_mutex_init(&mdptr->mutex, NULL); 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; } - 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. */ @@ -225,8 +224,7 @@ void xbt_mheap_destroy_no_free(xbt_mheap_t md) struct mdesc *mdp = md; if(--mdp->refcount == 0){ - LOCK(mdp) ; - sem_destroy(&mdp->sem); + pthread_mutex_destroy(&mdp->mutex); } } diff --git a/src/xbt/mmalloc/mmprivate.h b/src/xbt/mmalloc/mmprivate.h index 09cb4be8b2..c652e41965 100644 --- a/src/xbt/mmalloc/mmprivate.h +++ b/src/xbt/mmalloc/mmprivate.h @@ -20,7 +20,8 @@ #include "xbt/ex.h" #include "xbt/dynar.h" #include "xbt/swag.h" -#include + +#include #include #ifdef HAVE_LIMITS_H @@ -190,8 +191,8 @@ typedef struct { * */ 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; @@ -293,14 +294,14 @@ XBT_PUBLIC( void *)__mmalloc_remap_core(xbt_mheap_t mdp); 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. */ -#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){ -- 2.20.1