-static int xbt_thread_create_wrapper(int argc, char *argv[]) {
- xbt_thread_t t = (xbt_thread_t)SIMIX_process_get_data(SIMIX_process_self());
- SIMIX_process_set_data(SIMIX_process_self(),t->father_data);
- (*t->code)(t->userparam);
- free(t->name);
- free(t);
+static int xbt_thread_create_wrapper(int argc, char *argv[])
+{
+ xbt_thread_t t =
+ (xbt_thread_t) SIMIX_process_get_data(SIMIX_process_self());
+ SIMIX_process_set_data(SIMIX_process_self(), t->father_data);
+ (*t->code) (t->userparam);
+ if (t->joinable) {
+ t->done=1;
+ xbt_mutex_acquire(t->mutex);
+ xbt_cond_broadcast(t->cond);
+ xbt_mutex_release(t->mutex);
+ } else {
+ xbt_mutex_destroy(t->mutex);
+ xbt_cond_destroy(t->cond);
+ free(t->name);
+ free(t);
+ }