XBT_LOG_NEW_DEFAULT_SUBCATEGORY(xbt_dyn,xbt,"Dynamic arrays");
-#define _dynar_lock(dynar) \
- if (dynar->mutex) \
- xbt_mutex_lock(dynar->mutex)
-#define _dynar_unlock(dynar) \
- if (dynar->mutex) \
- xbt_mutex_unlock(dynar->mutex)
+
#define _sanity_check_dynar(dynar) \
xbt_assert0(dynar, \
"dynar is NULL")
void_f_pvoid_t * const free_f) {
xbt_dynar_t res = xbt_dynar_new(elmsize,free_f);
res->mutex = xbt_mutex_init();
+ res->synchro_process_pid = -1;
return res;
}
free((*dynar)->data);
}
- _xbt_clear_mem(*dynar, sizeof(s_xbt_dynar_t));
-
if ((*dynar)->mutex)
xbt_mutex_destroy((*dynar)->mutex);
+ _xbt_clear_mem(*dynar, sizeof(s_xbt_dynar_t));
+
free(*dynar);
*dynar=NULL;
}
_dynar_unlock(dynar);
}
+void _dynar_lock(xbt_dynar_t dynar) {
+ if ( (dynar->mutex) && (dynar->synchro_process_pid != xbt_getpid()) ) {
+ xbt_mutex_lock(dynar->mutex);
+ dynar->synchro_process_pid = xbt_getpid();
+ }
+
+}
+void _dynar_unlock(xbt_dynar_t dynar) {
+ if (dynar->mutex) {
+ xbt_mutex_unlock(dynar->mutex);
+ dynar->synchro_process_pid = -1;
+ }
+}
+
#ifdef SIMGRID_TEST
#define NB_ELEM 5000