Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
xbt_new raises an exception on error, no need to check for ENOMEM
[simgrid.git] / src / xbt / xbt_ucontext.c
index bdfa830..638edc6 100644 (file)
@@ -1,5 +1,19 @@
 \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
@@ -51,8 +65,7 @@ xbt_ucontext_suspend(xbt_context_t context);
 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
@@ -214,7 +227,7 @@ xbt_ucontext_yield(void)
 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
@@ -244,14 +257,13 @@ xbt_ucontext_swap(xbt_context_t context)
                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