\r
#include "ucontext_stack.h"\r
+#include "xbt/ex_interface.h"\r
+#include "xbt/xbt_context_factory.h"\r
+\r
+#include "ucontext_stack.h" /* loads context system definitions */\r
+#include <ucontext.h> /* context relative declarations */ \r
+#define STACK_SIZE 128*1024 /* lower this if you want to reduce the memory consumption */\r
+\r
+typedef struct s_xbt_ucontext {\r
+ XBT_CTX_BASE_T;\r
+ ucontext_t uc; /* the thread that execute the code */\r
+ char stack[STACK_SIZE]; /* the thread stack size */\r
+ struct s_xbt_ucontext* prev; /* the previous thread */\r
+} s_xbt_ucontext_t,* xbt_ucontext_t;\r
+\r
\r
/* callback: context fetching */\r
static ex_ctx_t*\r
static void\r
xbt_ucontext_resume(xbt_context_t context);\r
\r
-static void* \r
-xbt_ucontext_wrapper(void* param);\r
+static void xbt_ucontext_wrapper(void);\r
\r
/* callback: context fetching */\r
static ex_ctx_t*\r
static void \r
xbt_ucontext_start(xbt_context_t context)\r
{\r
- makecontext(&(((xbt_ucontext_t)context)->uc), (void (*)(void)) xbt_ucontext_wrapper, 1, context);\r
+ makecontext(&(((xbt_ucontext_t)context)->uc), xbt_ucontext_wrapper, 0);\r
}\r
\r
static void \r
xbt_ucontext_stop(1);\r
}\r
\r
-static void* \r
-xbt_ucontext_wrapper(void* param)\r
+static void\r
+xbt_ucontext_wrapper(void)\r
{\r
if (current_context->startup_func)\r
(*current_context->startup_func)(current_context->startup_arg);\r
\r
xbt_ucontext_stop((*(current_context->code))(current_context->argc, current_context->argv));\r
- return NULL;\r
}\r
\r
static void\r