Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Try to fixup the context mess
[simgrid.git] / src / xbt / xbt_context_sysv.c
similarity index 56%
rename from src/xbt/xbt_ucontext.c
rename to src/xbt/xbt_context_sysv.c
index 638edc6..9295621 100644 (file)
@@ -1,18 +1,18 @@
 \r
-#include "ucontext_stack.h"\r
 #include "xbt/ex_interface.h"\r
-#include "xbt/xbt_context_factory.h"\r
+#include "xbt/xbt_context_private.h"\r
 \r
-#include "ucontext_stack.h"            /* loads context system definitions                             */\r
+#include "context_sysv_config.h"       /* loads context system definitions                             */\r
+#include "portable.h" \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
+typedef struct s_xbt_ctx_sysv {\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
+       struct s_xbt_ctx_sysv* prev;/* the previous thread                                              */\r
+} s_xbt_ctx_sysv_t,* xbt_ctx_sysv_t;\r
 \r
 \r
 /* callback: context fetching */\r
@@ -24,59 +24,59 @@ static void
 xbt_jcontext_ex_terminate(xbt_ex_t *e);\r
 \r
 static xbt_context_t \r
-xbt_ucontext_factory_create_context(const char* name, xbt_main_func_t code, void_f_pvoid_t startup_func, void* startup_arg, void_f_pvoid_t cleanup_func, void* cleanup_arg, int argc, char** argv);\r
+xbt_ctx_sysv_factory_create_context(const char* name, xbt_main_func_t code, void_f_pvoid_t startup_func, void* startup_arg, void_f_pvoid_t cleanup_func, void* cleanup_arg, int argc, char** argv);\r
 \r
 static int\r
-xbt_ucontext_factory_finalize(xbt_context_factory_t* factory);\r
+xbt_ctx_sysv_factory_finalize(xbt_context_factory_t* factory);\r
 \r
 static int \r
-xbt_ucontext_factory_create_maestro_context(xbt_context_t* maestro);\r
+xbt_ctx_sysv_factory_create_maestro_context(xbt_context_t* maestro);\r
 \r
 static void \r
-xbt_ucontext_free(xbt_context_t context);\r
+xbt_ctx_sysv_free(xbt_context_t context);\r
 \r
 static void \r
-xbt_ucontext_kill(xbt_context_t context);\r
+xbt_ctx_sysv_kill(xbt_context_t context);\r
 \r
 static void \r
-xbt_ucontext_schedule(xbt_context_t context);\r
+xbt_ctx_sysv_schedule(xbt_context_t context);\r
 \r
 static void \r
-xbt_ucontext_yield(void);\r
+xbt_ctx_sysv_yield(void);\r
 \r
 static void \r
-xbt_ucontext_start(xbt_context_t context);\r
+xbt_ctx_sysv_start(xbt_context_t context);\r
 \r
 static void \r
-xbt_ucontext_stop(int exit_code);\r
+xbt_ctx_sysv_stop(int exit_code);\r
 \r
 static void \r
-xbt_ucontext_swap(xbt_context_t context);\r
+xbt_ctx_sysv_swap(xbt_context_t context);\r
 \r
 static void\r
-xbt_ucontext_schedule(xbt_context_t context);\r
+xbt_ctx_sysv_schedule(xbt_context_t context);\r
 \r
 static void\r
-xbt_ucontext_yield(void);\r
+xbt_ctx_sysv_yield(void);\r
 \r
 static void\r
-xbt_ucontext_suspend(xbt_context_t context);\r
+xbt_ctx_sysv_suspend(xbt_context_t context);\r
 \r
 static void\r
-xbt_ucontext_resume(xbt_context_t context);\r
+xbt_ctx_sysv_resume(xbt_context_t context);\r
 \r
-static void xbt_ucontext_wrapper(void);\r
+static void xbt_ctx_sysv_wrapper(void);\r
 \r
 /* callback: context fetching */\r
 static ex_ctx_t*\r
-xbt_ucontext_ex_ctx(void) \r
+xbt_ctx_sysv_ex_ctx(void) \r
 {\r
        return current_context->exception;\r
 }\r
 \r
 /* callback: termination */\r
 static void \r
-xbt_ucontext_ex_terminate(xbt_ex_t *e) \r
+xbt_ctx_sysv_ex_terminate(xbt_ex_t *e) \r
 {\r
        xbt_ex_display(e);\r
        abort();\r
@@ -84,28 +84,28 @@ xbt_ucontext_ex_terminate(xbt_ex_t *e)
 \r
 \r
 int\r
-xbt_ucontext_factory_init(xbt_context_factory_t* factory)\r
+xbt_ctx_sysv_factory_init(xbt_context_factory_t* factory)\r
 {\r
        /* context exception */\r
        *factory = xbt_new0(s_xbt_context_factory_t,1);\r
        \r
-       (*factory)->create_context = xbt_ucontext_factory_create_context;\r
-       (*factory)->finalize = xbt_ucontext_factory_finalize;\r
-       (*factory)->create_maestro_context = xbt_ucontext_factory_create_maestro_context;\r
-       (*factory)->name = "ucontext_context_factory";\r
+       (*factory)->create_context = xbt_ctx_sysv_factory_create_context;\r
+       (*factory)->finalize = xbt_ctx_sysv_factory_finalize;\r
+       (*factory)->create_maestro_context = xbt_ctx_sysv_factory_create_maestro_context;\r
+       (*factory)->name = "ctx_sysv_context_factory";\r
        \r
        /* context exception handlers */\r
-       __xbt_ex_ctx       = xbt_ucontext_ex_ctx;\r
-    __xbt_ex_terminate = xbt_ucontext_ex_terminate;    \r
+       __xbt_ex_ctx       = xbt_ctx_sysv_ex_ctx;\r
+    __xbt_ex_terminate = xbt_ctx_sysv_ex_terminate;    \r
     \r
        return 0;\r
 }\r
 \r
 static int \r
-xbt_ucontext_factory_create_maestro_context(xbt_context_t* maestro)\r
+xbt_ctx_sysv_factory_create_maestro_context(xbt_context_t* maestro)\r
 {\r
                \r
-       xbt_ucontext_t context = xbt_new0(s_xbt_ucontext_t, 1);\r
+       xbt_ctx_sysv_t context = xbt_new0(s_xbt_ctx_sysv_t, 1);\r
        \r
        context->exception = xbt_new(ex_ctx_t,1);\r
     XBT_CTX_INITIALIZE(context->exception);\r
@@ -118,7 +118,7 @@ xbt_ucontext_factory_create_maestro_context(xbt_context_t* maestro)
 \r
 \r
 static int\r
-xbt_ucontext_factory_finalize(xbt_context_factory_t* factory)\r
+xbt_ctx_sysv_factory_finalize(xbt_context_factory_t* factory)\r
 {\r
        free(maestro_context->exception);\r
        free(*factory);\r
@@ -127,9 +127,9 @@ xbt_ucontext_factory_finalize(xbt_context_factory_t* factory)
 }\r
 \r
 static xbt_context_t \r
-xbt_ucontext_factory_create_context(const char* name, xbt_main_func_t code, void_f_pvoid_t startup_func, void* startup_arg, void_f_pvoid_t cleanup_func, void* cleanup_arg, int argc, char** argv)\r
+xbt_ctx_sysv_factory_create_context(const char* name, xbt_main_func_t code, void_f_pvoid_t startup_func, void* startup_arg, void_f_pvoid_t cleanup_func, void* cleanup_arg, int argc, char** argv)\r
 {\r
-       xbt_ucontext_t context = xbt_new0(s_xbt_ucontext_t, 1);\r
+       xbt_ctx_sysv_t context = xbt_new0(s_xbt_ctx_sysv_t, 1);\r
        \r
        context->code = code;\r
        context->name = xbt_strdup(name);\r
@@ -150,18 +150,18 @@ xbt_ucontext_factory_create_context(const char* name, xbt_main_func_t code, void
        context->cleanup_arg = cleanup_arg;\r
        \r
        \r
-       context->free = xbt_ucontext_free;                      \r
-       context->kill = xbt_ucontext_kill;                      \r
-       context->schedule = xbt_ucontext_schedule;\r
-       context->yield = xbt_ucontext_yield;                    \r
-       context->start = xbt_ucontext_start;                    \r
-       context->stop = xbt_ucontext_stop;                      \r
+       context->free = xbt_ctx_sysv_free;                      \r
+       context->kill = xbt_ctx_sysv_kill;                      \r
+       context->schedule = xbt_ctx_sysv_schedule;\r
+       context->yield = xbt_ctx_sysv_yield;                    \r
+       context->start = xbt_ctx_sysv_start;                    \r
+       context->stop = xbt_ctx_sysv_stop;                      \r
        \r
        return (xbt_context_t)context;\r
 }\r
 \r
 static void \r
-xbt_ucontext_free(xbt_context_t context)\r
+xbt_ctx_sysv_free(xbt_context_t context)\r
 {\r
        if(context)\r
        {\r
@@ -187,10 +187,10 @@ xbt_ucontext_free(xbt_context_t context)
 }\r
 \r
 static void \r
-xbt_ucontext_kill(xbt_context_t context)\r
+xbt_ctx_sysv_kill(xbt_context_t context)\r
 {\r
        context->iwannadie = 1;\r
-       xbt_ucontext_swap(context);\r
+       xbt_ctx_sysv_swap(context);\r
 }\r
 \r
 /** \r
@@ -203,10 +203,10 @@ xbt_ucontext_kill(xbt_context_t context)
  * Only the maestro can call this function to run a given process.\r
  */\r
 static void \r
-xbt_ucontext_schedule(xbt_context_t context)\r
+xbt_ctx_sysv_schedule(xbt_context_t context)\r
 {\r
        xbt_assert0((current_context == maestro_context),"You are not supposed to run this function here!");\r
-       xbt_ucontext_swap(context);\r
+       xbt_ctx_sysv_swap(context);\r
 }\r
 \r
 /** \r
@@ -218,20 +218,20 @@ xbt_ucontext_schedule(xbt_context_t context)
  * to the maestro\r
  */\r
 static void \r
-xbt_ucontext_yield(void)\r
+xbt_ctx_sysv_yield(void)\r
 {\r
        xbt_assert0((current_context != maestro_context),"You are not supposed to run this function here!");\r
-       xbt_ucontext_swap(current_context);\r
+       xbt_ctx_sysv_swap(current_context);\r
 }\r
 \r
 static void \r
-xbt_ucontext_start(xbt_context_t context)\r
+xbt_ctx_sysv_start(xbt_context_t context)\r
 {\r
-       makecontext(&(((xbt_ucontext_t)context)->uc), xbt_ucontext_wrapper, 0);\r
+       makecontext(&(((xbt_ctx_sysv_t)context)->uc), xbt_ctx_sysv_wrapper, 0);\r
 }\r
 \r
 static void \r
-xbt_ucontext_stop(int exit_code)\r
+xbt_ctx_sysv_stop(int exit_code)\r
 {\r
        if(current_context->cleanup_func) \r
                ((*current_context->cleanup_func))(current_context->cleanup_arg);\r
@@ -239,59 +239,59 @@ xbt_ucontext_stop(int exit_code)
        xbt_swag_remove(current_context, context_living);\r
        xbt_swag_insert(current_context, context_to_destroy);   \r
        \r
-       xbt_ucontext_swap(current_context);\r
+       xbt_ctx_sysv_swap(current_context);\r
 }\r
 \r
 static void \r
-xbt_ucontext_swap(xbt_context_t context)\r
+xbt_ctx_sysv_swap(xbt_context_t context)\r
 {\r
        xbt_assert0(current_context, "You have to call context_init() first.");\r
        xbt_assert0(context, "Invalid argument");\r
        \r
-       if(((xbt_ucontext_t)context)->prev == NULL) \r
-               xbt_ucontext_resume(context);\r
+       if(((xbt_ctx_sysv_t)context)->prev == NULL) \r
+               xbt_ctx_sysv_resume(context);\r
        else \r
-               xbt_ucontext_suspend(context);\r
+               xbt_ctx_sysv_suspend(context);\r
        \r
        if(current_context->iwannadie)\r
-               xbt_ucontext_stop(1);\r
+               xbt_ctx_sysv_stop(1);\r
 }\r
 \r
 static void\r
-xbt_ucontext_wrapper(void)\r
+xbt_ctx_sysv_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
+       xbt_ctx_sysv_stop((*(current_context->code))(current_context->argc, current_context->argv));\r
 }\r
 \r
 static void\r
-xbt_ucontext_suspend(xbt_context_t context)\r
+xbt_ctx_sysv_suspend(xbt_context_t context)\r
 {\r
        int rv;\r
        \r
-       xbt_ucontext_t prev_context = ((xbt_ucontext_t)context)->prev;\r
+       xbt_ctx_sysv_t prev_context = ((xbt_ctx_sysv_t)context)->prev;\r
        \r
-       current_context = (xbt_context_t)(((xbt_ucontext_t)context)->prev);\r
+       current_context = (xbt_context_t)(((xbt_ctx_sysv_t)context)->prev);\r
        \r
-       ((xbt_ucontext_t)context)->prev = NULL;\r
+       ((xbt_ctx_sysv_t)context)->prev = NULL;\r
        \r
-       rv = swapcontext(&(((xbt_ucontext_t)context)->uc), &(prev_context->uc));\r
+       rv = swapcontext(&(((xbt_ctx_sysv_t)context)->uc), &(prev_context->uc));\r
                \r
        xbt_assert0((rv == 0), "Context swapping failure");\r
 }\r
 \r
 static void\r
-xbt_ucontext_resume(xbt_context_t context)\r
+xbt_ctx_sysv_resume(xbt_context_t context)\r
 {\r
        int rv;\r
        \r
-       ((xbt_ucontext_t)context)->prev = (xbt_ucontext_t)current_context;\r
+       ((xbt_ctx_sysv_t)context)->prev = (xbt_ctx_sysv_t)current_context;\r
        \r
        current_context = context;\r
        \r
-       rv = swapcontext(&(((xbt_ucontext_t)context)->prev->uc), &(((xbt_ucontext_t)context)->uc));\r
+       rv = swapcontext(&(((xbt_ctx_sysv_t)context)->prev->uc), &(((xbt_ctx_sysv_t)context)->uc));\r
                \r
        xbt_assert0((rv == 0), "Context swapping failure");\r
 }\r