X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/400d76d6ab5e73b056aabdf9ef2842d8a495b500..169edc40a9d6aac50da8647a98df1e2b7cd92727:/src/xbt/context.c diff --git a/src/xbt/context.c b/src/xbt/context.c index 2091bb7a0e..6ea5172a88 100644 --- a/src/xbt/context.c +++ b/src/xbt/context.c @@ -15,7 +15,7 @@ #include "xbt/dynar.h" #include "gras_config.h" -XBT_LOG_NEW_DEFAULT_SUBCATEGORY(context, xbt, "Context"); +XBT_LOG_NEW_DEFAULT_SUBCATEGORY(xbt_ctx, xbt, "Context"); #define VOIRP(expr) DEBUG1(" {" #expr " = %p }", expr) @@ -105,28 +105,9 @@ static void xbt_context_destroy(xbt_context_t context) return; } -static void *__context_wrapper(void *c) +static void __context_exit(xbt_context_t context ,int value) { - xbt_context_t context = c; int i; - -#ifdef USE_PTHREADS - DEBUG2("**[%p:%p]** Lock ****",context,(void*)pthread_self()); - pthread_mutex_lock(&(context->mutex)); - DEBUG2("**[%p:%p]** Releasing the prisonner ****",context,(void*)pthread_self()); - pthread_cond_signal(&(context->cond)); - DEBUG2("**[%p:%p]** Going to Jail ****",context,(void*)pthread_self()); - pthread_cond_wait(&(context->cond), &(context->mutex)); - DEBUG2("**[%p:%p]** Unlocking ****",context,(void*)pthread_self()); - pthread_mutex_unlock(&(context->mutex)); -#endif - - if(context->startup_func) - context->startup_func(context->startup_arg); - - DEBUG0("Calling the main function"); - (context->code) (context->argc,context->argv); - DEBUG0("Freeing arguments"); for(i=0;iargc; i++) if(context->argv[i]) free(context->argv[i]); @@ -158,6 +139,29 @@ static void *__context_wrapper(void *c) __xbt_context_yield(context); #endif xbt_assert0(0,"You can't be here!"); +} + +static void *__context_wrapper(void *c) +{ + xbt_context_t context = c; + +#ifdef USE_PTHREADS + DEBUG2("**[%p:%p]** Lock ****",context,(void*)pthread_self()); + pthread_mutex_lock(&(context->mutex)); + DEBUG2("**[%p:%p]** Releasing the prisonner ****",context,(void*)pthread_self()); + pthread_cond_signal(&(context->cond)); + DEBUG2("**[%p:%p]** Going to Jail ****",context,(void*)pthread_self()); + pthread_cond_wait(&(context->cond), &(context->mutex)); + DEBUG2("**[%p:%p]** Unlocking ****",context,(void*)pthread_self()); + pthread_mutex_unlock(&(context->mutex)); +#endif + + if(context->startup_func) + context->startup_func(context->startup_arg); + + DEBUG0("Calling the main function"); + + __context_exit(context, (context->code) (context->argc,context->argv)); return NULL; } @@ -168,9 +172,16 @@ static ex_ctx_t *__context_ex_ctx(void) } /* callback: termination */ -static void __context_ex_terminate(xbt_ex_t *e) -{ - exit(e->value); +static void __context_ex_terminate(xbt_ex_t *e) { + xbt_ex_display(e); + + abort(); + /* FIXME: there should be a configuration variable to choose this + if(current_context!=init_context) + __context_exit(current_context, e->value); + else + abort(); + */ } /** \name Functions