X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/868ca6786edec0d6e00deaf64e95968725b7f307..3de9bd297b49c6d0b62a18b21aef156da297dea7:/src/xbt/context.c diff --git a/src/xbt/context.c b/src/xbt/context.c index 4f57bc719c..bc16f82279 100644 --- a/src/xbt/context.c +++ b/src/xbt/context.c @@ -44,11 +44,17 @@ static void __xbt_context_yield(xbt_context_t context) #ifdef USE_PTHREADS if (context) { xbt_context_t self = current_context; + DEBUG0("**** Locking ****"); pthread_mutex_lock(&(context->mutex)); + DEBUG0("**** Updating current_context ****"); current_context = context; + DEBUG0("**** Releasing the prisonner ****"); pthread_cond_signal(&(context->cond)); + DEBUG0("**** Going to jail ****"); pthread_cond_wait(&(context->cond), &(context->mutex)); + DEBUG0("**** Unlocking ****"); pthread_mutex_unlock(&(context->mutex)); + DEBUG0("**** Updating current_context ****"); current_context = self; } #else @@ -102,7 +108,13 @@ static void *__context_wrapper(void *c) int i; #ifdef USE_PTHREADS + DEBUG0("**** Lock ****"); + pthread_mutex_lock(&(context->mutex)); + DEBUG0("**** Releasing the prisonner ****"); + pthread_cond_signal(&(context->cond)); + DEBUG0("**** Going to Jail ****"); pthread_cond_wait(&(context->cond), &(context->mutex)); + DEBUG0("**** Unlocking ****"); pthread_mutex_unlock(&(context->mutex)); #endif @@ -130,7 +142,7 @@ static void *__context_wrapper(void *c) /** \name Functions * \ingroup XBT_context */ -/*@{*/ +/* @{ */ /** Context module initialization * * \warning It has to be called before using any other function of this module. @@ -167,11 +179,16 @@ void xbt_context_empty_trash(void) void xbt_context_start(xbt_context_t context) { #ifdef USE_PTHREADS - pthread_mutex_lock(&(context->mutex)); - /* Launch the thread */ + DEBUG0("**** Locking ****"); + pthread_mutex_lock(&(context->mutex)); + DEBUG0("**** Pthread create ****"); xbt_assert0(!pthread_create(context->thread, NULL, __context_wrapper, context), "Unable to create a thread."); + DEBUG0("**** Going to jail ****"); + pthread_cond_wait(&(context->cond), &(context->mutex)); + DEBUG0("**** Unlocking ****"); + pthread_mutex_unlock(&(context->mutex)); #else makecontext (&(context->uc), (void (*) (void)) __context_wrapper, 1, context); @@ -289,5 +306,4 @@ void xbt_context_free(xbt_context_t context) return; } - -/*@}*/ +/* @} */