return NULL;
}
+/* callback: context fetching */
+static ex_ctx_t *__context_ex_ctx(void)
+{
+ return current_context->exception;
+}
+
+/* callback: termination */
+static void __context_ex_terminate(ex_t *e)
+{
+ exit(e->value);
+}
+
/** \name Functions
* \ingroup XBT_context
*/
{
if(!current_context) {
current_context = init_context = xbt_new0(s_xbt_context_t,1);
+ init_context->exception = xbt_new(ex_ctx_t,1);
+ XBT_CTX_INITIALIZE(init_context->exception);
+ __xbt_ex_ctx = __context_ex_ctx;
+ __xbt_ex_terminate = __context_ex_terminate;
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);
res->startup_arg = startup_arg;
res->cleanup_func = cleanup_func;
res->cleanup_arg = cleanup_arg;
+ res->exception = xbt_new(ex_ctx_t,1);
+ XBT_CTX_INITIALIZE(res->exception);
xbt_swag_insert(res, context_living);
for(i=0;i<context->argc; i++)
if(context->argv[i]) free(context->argv[i]);
if(context->argv) free(context->argv);
+ if(context->exception) free(context->exception);
if(context->cleanup_func)
context->cleanup_func(context->cleanup_arg);