Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Avoid depending on C++11 stuff when including C/SMPI headers
[simgrid.git] / src / simix / smx_synchro.cpp
index 95ff865..305fc32 100644 (file)
@@ -7,7 +7,8 @@
 
 #include "src/surf/surf_interface.hpp"
 #include "smx_private.h"
-#include "xbt/log.h"
+#include <xbt/ex.hpp>
+#include <xbt/log.h>
 
 #include "src/simix/SynchroRaw.hpp"
 
@@ -240,8 +241,7 @@ smx_cond_t SIMIX_cond_init(void)
   smx_cond_t cond = xbt_new0(s_smx_cond_t, 1);
   cond->sleeping = xbt_swag_new(xbt_swag_offset(p, synchro_hookup));
   cond->mutex = nullptr;
-  cond->refcount_ = 0;
-  intrusive_ptr_add_ref(cond);
+  cond->refcount_ = 1;
   XBT_OUT();
   return cond;
 }
@@ -352,12 +352,13 @@ void SIMIX_cond_broadcast(smx_cond_t cond)
   XBT_OUT();
 }
 
-/**
- * \brief Destroys a condition.
- *
- * Destroys and frees the condition's memory. 
- * \param cond A condition
- */
+smx_cond_t SIMIX_cond_ref(smx_cond_t cond)
+{
+  if (cond != nullptr)
+    intrusive_ptr_add_ref(cond);
+  return cond;
+}
+
 void SIMIX_cond_unref(smx_cond_t cond)
 {
   XBT_IN("(%p)",cond);
@@ -372,6 +373,7 @@ void SIMIX_cond_unref(smx_cond_t cond)
 void intrusive_ptr_add_ref(s_smx_cond_t *cond)
 {
   auto previous = (cond->refcount_)++;
+  xbt_assert(previous != 0);
   (void) previous;
 }