- xbt_assert0(current_context,"You have to call context_init() first.");
-
- DEBUG2("--------- current_context (%p) is yielding to context(%p) ---------",current_context,context);
-
- #ifdef CONTEXT_THREADS
- if (context){
- xbt_context_t self = current_context;
- DEBUG2("[%p] **** Locking ctx %p ****", self, context);
- xbt_mutex_lock(context->mutex);
- DEBUG1("[%p] **** Updating current_context ****", self);
- current_context = context;
- DEBUG1("[%p] **** Releasing the prisonner ****", self);
- xbt_thcond_signal(context->cond);
- DEBUG3("[%p] **** Going to jail on individual %p/%p ****", self,context->cond, context->mutex);
- xbt_thcond_wait(context->cond, context->mutex);
- DEBUG2("[%p] **** Unlocking individual %p ****", self,context->mutex);
- xbt_mutex_unlock(context->mutex);
- DEBUG1("[%p] **** Updating current_context ****", self);
- current_context = self;
- }
- #else /* use SUSv2 contexts */
- if(current_context)
- VOIRP(current_context->save);
-
- VOIRP(context);
-
- if(context)
- VOIRP(context->save);
-
- if (context){
-
- int return_value = 0;
-
- if(context->save==NULL){
-
- DEBUG1("[%p] **** Yielding to somebody else ****", current_context);
- DEBUG2("Saving current_context value (%p) to context(%p)->save",current_context,context);
- context->save = current_context ;
- DEBUG1("current_context becomes context(%p) ",context);
- current_context = context ;
- DEBUG1("Current position memorized (context->save). Jumping to context (%p)",context);
- return_value = swapcontext (&(context->save->uc), &(context->uc));
- xbt_assert0((return_value==0),"Context swapping failure");
- DEBUG1("I am (%p). Coming back\n",context);
- } else {
- xbt_context_t old_context = context->save ;
- DEBUG1("[%p] **** Back ! ****", context);
- DEBUG2("Setting current_context (%p) to context(%p)->save",current_context,context);
- current_context = context->save ;
- DEBUG1("Setting context(%p)->save to NULL",context);
- context->save = NULL ;
- DEBUG2("Current position memorized (%p). Jumping to context (%p)",context,old_context);
- return_value = swapcontext (&(context->uc), &(old_context->uc));
- xbt_assert0((return_value==0),"Context swapping failure");
- DEBUG1("I am (%p). Coming back\n",context);
-
- }
- }
- #endif
- if(current_context->iwannadie)
- __context_exit(current_context, 1);
-
- return;
+ xbt_assert0(current_context, "You have to call context_init() first.");
+
+ DEBUG2
+ ("--------- current_context (%p) is yielding to context(%p) ---------",
+ current_context, context);
+
+#ifdef CONTEXT_THREADS
+ if (context) {
+ xbt_context_t self = current_context;
+ DEBUG2("[%p] **** Locking ctx %p ****", self, context);
+ xbt_os_mutex_lock(context->mutex);
+ DEBUG1("[%p] **** Updating current_context ****", self);
+ current_context = context;
+ DEBUG1("[%p] **** Releasing the prisonner ****", self);
+ xbt_os_cond_signal(context->cond);
+ DEBUG3("[%p] **** Going to jail on individual %p/%p ****", self,
+ context->cond, context->mutex);
+ xbt_os_cond_wait(context->cond, context->mutex);
+ DEBUG2("[%p] **** Unlocking individual %p ****", self, context->mutex);
+ xbt_os_mutex_unlock(context->mutex);
+ DEBUG1("[%p] **** Updating current_context ****", self);
+ current_context = self;
+ }
+#else /* use SUSv2 contexts */
+ VOIRP(current_context);
+ if (current_context)
+ VOIRP(current_context->save);
+
+ VOIRP(context);
+
+ if (context)
+ VOIRP(context->save);
+
+ if (context) {
+
+ int return_value = 0;
+
+ if (context->save == NULL) {
+
+ DEBUG1("[%p] **** Yielding to somebody else ****", current_context);
+ DEBUG2("Saving current_context value (%p) to context(%p)->save",
+ current_context, context);
+ context->save = current_context;
+ DEBUG1("current_context becomes context(%p) ", context);
+ current_context = context;
+ DEBUG1
+ ("Current position memorized (context->save). Jumping to context (%p)",
+ context);
+ return_value = swapcontext(&(context->save->uc), &(context->uc));
+ xbt_assert0((return_value == 0), "Context swapping failure");
+ DEBUG1("I am (%p). Coming back\n", context);
+ } else {
+ xbt_context_t old_context = context->save;
+ DEBUG1("[%p] **** Back ! ****", context);
+ DEBUG2("Setting current_context (%p) to context(%p)->save",
+ current_context, context);
+ current_context = context->save;
+ DEBUG1("Setting context(%p)->save to NULL", context);
+ context->save = NULL;
+ DEBUG2("Current position memorized (%p). Jumping to context (%p)",
+ context, old_context);
+ return_value = swapcontext(&(context->uc), &(old_context->uc));
+ xbt_assert0((return_value == 0), "Context swapping failure");
+ DEBUG1("I am (%p). Coming back\n", context);
+
+ }
+ }
+#endif
+ if (current_context->iwannadie)
+ __context_exit(current_context, 1);
+
+ return;