From dc061ae1d3507d0e3b7d3569553b31cb6709702e Mon Sep 17 00:00:00 2001 From: mquinson Date: Tue, 23 Mar 2010 00:49:54 +0000 Subject: [PATCH] kill arg 'old_ctx' of function resume in context factory. Was only used when killing a process, and no binding implemented this correctly (since it was not natural) git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@7303 48e7efb5-ca39-0410-a469-dd3cf9ba447f --- src/simix/private.h | 10 ++++------ src/simix/smx_context_java.c | 10 +++------- src/simix/smx_context_lua.c | 7 +++---- src/simix/smx_context_private.h | 1 - src/simix/smx_context_ruby.c | 8 +++----- src/simix/smx_context_sysv.c | 26 +++++++------------------- src/simix/smx_context_thread.c | 14 ++++---------- 7 files changed, 24 insertions(+), 52 deletions(-) diff --git a/src/simix/private.h b/src/simix/private.h index a21e458478..d58d6e5b62 100644 --- a/src/simix/private.h +++ b/src/simix/private.h @@ -58,7 +58,7 @@ extern SIMIX_Global_t simix_global; @ingroup m_datatypes_management_details @{ */ typedef struct s_smx_process { s_xbt_swag_hookup_t process_hookup; - s_xbt_swag_hookup_t synchro_hookup; + s_xbt_swag_hookup_t synchro_hookup; /* process_to_run or mutex->sleeping and co */ s_xbt_swag_hookup_t host_proc_hookup; s_xbt_swag_hookup_t destroy_hookup; @@ -264,8 +264,7 @@ typedef void (*smx_pfn_context_stop_t) (smx_context_t); typedef void (*smx_pfn_context_suspend_t) (smx_context_t context); /* function used to resume the current context */ -typedef void (*smx_pfn_context_resume_t) (smx_context_t old_context, - smx_context_t new_context); +typedef void (*smx_pfn_context_resume_t) (smx_context_t new_context); /* interface of the context factories */ typedef struct s_smx_context_factory { @@ -358,10 +357,9 @@ static inline void SIMIX_context_stop(smx_context_t context) { \param old_context the actual context from which is resuming \param new_context the context to resume */ -static inline void SIMIX_context_resume(smx_context_t old_context, - smx_context_t new_context) +static inline void SIMIX_context_resume(smx_context_t new_context) { - (*(simix_global->context_factory->resume)) (old_context, new_context); + (*(simix_global->context_factory->resume)) (new_context); } /** diff --git a/src/simix/smx_context_java.c b/src/simix/smx_context_java.c index 8a64130bd7..d2f9ddbf6f 100644 --- a/src/simix/smx_context_java.c +++ b/src/simix/smx_context_java.c @@ -21,15 +21,10 @@ smx_ctx_java_factory_create_context(xbt_main_func_t code, int argc, char** argv, static int smx_ctx_java_factory_finalize(smx_context_factory_t * factory); static void smx_ctx_java_free(smx_context_t context); - static void smx_ctx_java_start(smx_context_t context); - static void smx_ctx_java_stop(smx_context_t context); - static void smx_ctx_java_suspend(smx_context_t context); - -static void - smx_ctx_java_resume(smx_context_t old_context, smx_context_t new_context); +static void smx_ctx_java_resume(smx_context_t new_context); void SIMIX_ctx_java_factory_init(smx_context_factory_t * factory) { @@ -150,8 +145,9 @@ static void smx_ctx_java_suspend(smx_context_t context) jprocess_unschedule(context); } +// FIXME: inline those functions static void -smx_ctx_java_resume(smx_context_t old_context, smx_context_t new_context) +smx_ctx_java_resume(smx_context_t new_context) { jprocess_schedule(new_context); } diff --git a/src/simix/smx_context_lua.c b/src/simix/smx_context_lua.c index a71dbba85b..efd9a01028 100644 --- a/src/simix/smx_context_lua.c +++ b/src/simix/smx_context_lua.c @@ -48,12 +48,11 @@ smx_ctx_lua_create_context(xbt_main_func_t code, int argc, char** argv, void_f_pvoid_t cleanup_func, void* cleanup_arg); static int smx_ctx_lua_factory_finalize(smx_context_factory_t *factory); + static void smx_ctx_lua_free(smx_context_t context); static void smx_ctx_lua_stop(smx_context_t context); static void smx_ctx_lua_suspend(smx_context_t context); - -static void -smx_ctx_lua_resume(smx_context_t old_context, smx_context_t new_context); +static void smx_ctx_lua_resume(smx_context_t new_context); static void smx_ctx_sysv_wrapper(void); @@ -175,7 +174,7 @@ static void smx_ctx_lua_suspend(smx_context_t pcontext) { } static void -smx_ctx_lua_resume(smx_context_t old_context, smx_context_t new_context) { +smx_ctx_lua_resume(smx_context_t new_context) { smx_ctx_lua_t context = (smx_ctx_lua_t)new_context; DEBUG1("Resuming %s",context->argv[0]); int ret = lua_resume(context->state,context->nargs); diff --git a/src/simix/smx_context_private.h b/src/simix/smx_context_private.h index 47afd85632..7ee1ce0fdf 100644 --- a/src/simix/smx_context_private.h +++ b/src/simix/smx_context_private.h @@ -68,7 +68,6 @@ typedef void (*smx_pfn_context_stop_t) (int); /* interface of the context factories */ typedef struct s_smx_context_factory { - smx_pfn_context_factory_create_maestro_context_t create_maestro_context; smx_pfn_context_factory_create_context_t create_context; smx_pfn_context_factory_finalize_t finalize; smx_pfn_context_free_t free; diff --git a/src/simix/smx_context_ruby.c b/src/simix/smx_context_ruby.c index 112ca360ee..8295eb39f0 100644 --- a/src/simix/smx_context_ruby.c +++ b/src/simix/smx_context_ruby.c @@ -23,8 +23,7 @@ static int smx_ctx_ruby_factory_finalize(smx_context_factory_t *factory); static void smx_ctx_ruby_free(smx_context_t context); static void smx_ctx_ruby_stop(smx_context_t context); static void smx_ctx_ruby_suspend(smx_context_t context); -static void -smx_ctx_ruby_resume(smx_context_t old_context,smx_context_t new_context); +static void smx_ctx_ruby_resume(smx_context_t new_context); static void smx_ctx_ruby_wrapper(void); @@ -125,9 +124,8 @@ static void smx_ctx_ruby_suspend(smx_context_t context) { rb_process_unschedule(ctx_ruby->process); } -static void smx_ctx_ruby_resume(smx_context_t old_context,smx_context_t new_context) { - DEBUG2("smx_ctx_ruby_resume(%s,%s)", - (old_context->argc?old_context->argv[0]:"maestro"), +static void smx_ctx_ruby_resume(smx_context_t new_context) { + DEBUG1("smx_ctx_ruby_resume(%s)", (new_context->argc?new_context->argv[0]:"maestro")); smx_ctx_ruby_t ctx_ruby = (smx_ctx_ruby_t) new_context; diff --git a/src/simix/smx_context_sysv.c b/src/simix/smx_context_sysv.c index a44593d9e0..fe0f7ac161 100644 --- a/src/simix/smx_context_sysv.c +++ b/src/simix/smx_context_sysv.c @@ -25,7 +25,6 @@ typedef struct s_smx_ctx_sysv { SMX_CTX_BASE_T; ucontext_t uc; /* the thread that execute the code */ char stack[STACK_SIZE]; /* the thread stack size */ - struct s_smx_ctx_sysv *prev; /* the previous process */ #ifdef HAVE_VALGRIND_VALGRIND_H unsigned int valgrind_stack_id; /* the valgrind stack id */ #endif @@ -38,13 +37,9 @@ smx_ctx_sysv_factory_create_context(xbt_main_func_t code, int argc, char** argv, static int smx_ctx_sysv_factory_finalize(smx_context_factory_t *factory); static void smx_ctx_sysv_free(smx_context_t context); - static void smx_ctx_sysv_stop(smx_context_t context); - static void smx_ctx_sysv_suspend(smx_context_t context); - -static void -smx_ctx_sysv_resume(smx_context_t old_context, smx_context_t new_context); +static void smx_ctx_sysv_resume(smx_context_t new_context); static void smx_ctx_sysv_wrapper(void); @@ -159,28 +154,21 @@ static void smx_ctx_sysv_wrapper() smx_ctx_sysv_stop((smx_context_t)context); } -static void smx_ctx_sysv_suspend(smx_context_t context) -{ +static void smx_ctx_sysv_suspend(smx_context_t context) { int rv; + ucontext_t maestro_ctx = ((smx_ctx_sysv_t)simix_global->maestro_process->context)->uc; - smx_ctx_sysv_t prev_context = ((smx_ctx_sysv_t) context)->prev; - - ((smx_ctx_sysv_t) context)->prev = NULL; - - rv = swapcontext(&((smx_ctx_sysv_t) context)->uc, &prev_context->uc); + rv = swapcontext(&((smx_ctx_sysv_t) context)->uc, &maestro_ctx); xbt_assert0((rv == 0), "Context swapping failure"); } static void -smx_ctx_sysv_resume(smx_context_t old_context, smx_context_t new_context) -{ +smx_ctx_sysv_resume(smx_context_t new_context) { int rv; + smx_ctx_sysv_t maestro = (smx_ctx_sysv_t)simix_global->maestro_process->context; - ((smx_ctx_sysv_t) new_context)->prev = (smx_ctx_sysv_t)old_context; - - rv = swapcontext(&((smx_ctx_sysv_t)old_context)->uc, - &((smx_ctx_sysv_t)new_context)->uc); + rv = swapcontext(&(maestro->uc), &((smx_ctx_sysv_t)new_context)->uc); xbt_assert0((rv == 0), "Context swapping failure"); } diff --git a/src/simix/smx_context_thread.c b/src/simix/smx_context_thread.c index 30c66538fc..63f2556cfd 100644 --- a/src/simix/smx_context_thread.c +++ b/src/simix/smx_context_thread.c @@ -32,9 +32,7 @@ static int smx_ctx_thread_factory_finalize(smx_context_factory_t * factory); static void smx_ctx_thread_free(smx_context_t context); static void smx_ctx_thread_stop(smx_context_t context); static void smx_ctx_thread_suspend(smx_context_t context); - -static void - smx_ctx_thread_resume(smx_context_t old_context, smx_context_t new_context); +static void smx_ctx_thread_resume(smx_context_t new_context); static void *smx_ctx_thread_wrapper(void *param); @@ -45,7 +43,6 @@ void SIMIX_ctx_thread_factory_init(smx_context_factory_t * factory) (*factory)->create_context = smx_ctx_thread_factory_create_context; (*factory)->finalize = smx_ctx_thread_factory_finalize; (*factory)->free = smx_ctx_thread_free; - (*factory)->start = smx_ctx_thread_start; (*factory)->stop = smx_ctx_thread_stop; (*factory)->suspend = smx_ctx_thread_suspend; (*factory)->resume = smx_ctx_thread_resume; @@ -81,7 +78,7 @@ smx_ctx_thread_factory_create_context(xbt_main_func_t code, int argc, char** arg /* NOTE: The first argument to xbt_os_thread_create used to be the process * * name, but now the name is stored at SIMIX level, so we pass a null */ context->thread = - xbt_os_thread_create(NULL, smx_ctx_thread_wrapper, ctx_thread); + xbt_os_thread_create(NULL, smx_ctx_thread_wrapper, context); /* wait the starting of the newly created process */ xbt_os_sem_acquire(context->end); @@ -149,15 +146,12 @@ static void *smx_ctx_thread_wrapper(void *param) return NULL; } -static void smx_ctx_thread_suspend(smx_context_t context) -{ +static void smx_ctx_thread_suspend(smx_context_t context) { xbt_os_sem_release(((smx_ctx_thread_t) context)->end); xbt_os_sem_acquire(((smx_ctx_thread_t) context)->begin); } -static void smx_ctx_thread_resume(smx_context_t not_used, - smx_context_t new_context) -{ +static void smx_ctx_thread_resume(smx_context_t new_context) { xbt_os_sem_release(((smx_ctx_thread_t) new_context)->begin); xbt_os_sem_acquire(((smx_ctx_thread_t) new_context)->end); } -- 2.20.1