static xbt_context_t init_context = NULL;
static xbt_swag_t context_to_destroy = NULL;
static xbt_swag_t context_living = NULL;
+#ifdef CONTEXT_THREADS
static xbt_mutex_t creation_mutex;
static xbt_thcond_t creation_cond;
+#endif
static void __context_exit(xbt_context_t context ,int value);
static void __xbt_context_yield(xbt_context_t context)
DEBUG2("**[%p:%p]** Lock ****",context,(void*)xbt_thread_self());
xbt_mutex_lock(creation_mutex);
+ xbt_mutex_lock(context->mutex);
DEBUG2("**[%p:%p]** Releasing the creator ****",context,(void*)xbt_thread_self());
xbt_thcond_signal(creation_cond);
xbt_mutex_unlock(creation_mutex);
DEBUG2("**[%p:%p]** Going to Jail ****",context,(void*)xbt_thread_self());
- xbt_mutex_lock(context->mutex);
xbt_thcond_wait(context->cond, context->mutex);
DEBUG2("**[%p:%p]** Unlocking ****",context,(void*)xbt_thread_self());
context_to_destroy = xbt_swag_new(xbt_swag_offset(*current_context,hookup));
context_living = xbt_swag_new(xbt_swag_offset(*current_context,hookup));
xbt_swag_insert(init_context, context_living);
+#ifdef CONTEXT_THREADS
creation_mutex = xbt_mutex_init();
creation_cond = xbt_thcond_init();
+#endif
}
}
xbt_context_kill(context);
}
}
- // xbt_context_kill(init_context);
+ free(init_context->exception);
+ free(init_context);
+ init_context = current_context = NULL ;
xbt_context_empty_trash();
xbt_swag_free(context_to_destroy);
xbt_swag_free(context_living);
- init_context = current_context = NULL ;
+#ifdef CONTEXT_THREADS
xbt_mutex_destroy(creation_mutex);
- xbt_thcond_destroy(creation_cond);
+ xbt_thcond_destroy(creation_cond);
+#endif
}
/**