Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
our malloc implementation NEEDS multi-threading protection
authorMartin Quinson <martin.quinson@loria.fr>
Wed, 8 Feb 2012 16:41:11 +0000 (17:41 +0100)
committerMartin Quinson <martin.quinson@loria.fr>
Wed, 8 Feb 2012 16:41:11 +0000 (17:41 +0100)
src/xbt/mmalloc/mmprivate.h

index b2dc18f..659df6e 100644 (file)
@@ -246,15 +246,21 @@ extern void *__mmalloc_remap_core(xbt_mheap_t mdp);
     like sbrk(), but using mmap(). */
 extern void *mmorecore(struct mdesc *mdp, int size);
 
     like sbrk(), but using mmap(). */
 extern void *mmorecore(struct mdesc *mdp, int size);
 
-/* Thread-safety (if the sem is already created) FIXME: KILLIT*/
-#define LOCK(mdp)   do {  \
-    if (mdp->locked)      \
-      fprintf(stderr,"panic! I'm not reintrant\n"); \
-               sem_wait(&mdp->sem);  \
-               mdp->locked=1;        \
+/* Thread-safety (if the sem 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)   do {    \
+    if (0 && mdp->locked) {      \
+      fprintf(stderr,"panic! deadlock detected because %s is not reintrant.\n",__FUNCTION__); \
+      abort();              \
+    }                       \
+               sem_wait(&mdp->sem);    \
+               mdp->locked=1;          \
   } while(0)
 
   } while(0)
 
-
 #define UNLOCK(mdp)  do {  \
                sem_post(&mdp->sem);   \
     mdp->locked=0;         \
 #define UNLOCK(mdp)  do {  \
                sem_post(&mdp->sem);   \
     mdp->locked=0;         \