#include "context_private.h"
#include "xbt/log.h"
#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)
pthread_cond_destroy(&(context->cond));
#endif
if(context->exception) free(context->exception);
+
+#ifdef USE_WIN_CONTEXT
+ if(context->uc.uc_stack.ss_sp)
+ free (context->uc.uc_stack.ss_sp);
+#endif
+
free(context);
return;
}
}
/* callback: termination */
-static void __context_ex_terminate(xbt_ex_t *e)
-{
- __context_exit(current_context, 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
/* WARNING : when this context is over, the current_context (i.e. the
father), is awaken... Theorically, the wrapper should prevent using
this feature. */
-# ifndef USE_WIN_CONTEXT
+# ifdef USE_WIN_CONTEXT
+ res->uc.uc_stack.ss_sp = xbt_malloc(STACK_SIZE);
+ res->uc.uc_stack.ss_size = STACK_SIZE ;
+#else
res->uc.uc_stack.ss_sp = pth_skaddr_makecontext(res->stack,STACK_SIZE);
res->uc.uc_stack.ss_size = pth_sksize_makecontext(res->stack,STACK_SIZE);
# endif /* USE_WIN_CONTEXT */