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++;
}
}
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. */
struct mdesc *mdp = md;
if(--mdp->refcount == 0){
- LOCK(mdp) ;
- sem_destroy(&mdp->sem);
+ pthread_mutex_destroy(&mdp->mutex);
}
}
#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
* */
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;
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){