X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/521aa2e579bdf76e25487fb6b9019e78ec75ad32..dc061ae1d3507d0e3b7d3569553b31cb6709702e:/src/simix/smx_context_lua.c?ds=sidebyside diff --git a/src/simix/smx_context_lua.c b/src/simix/smx_context_lua.c index 51ac850b00..efd9a01028 100644 --- a/src/simix/smx_context_lua.c +++ b/src/simix/smx_context_lua.c @@ -48,13 +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_start(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); @@ -70,7 +68,6 @@ void SIMIX_ctx_lua_factory_init(smx_context_factory_t *factory) { (*factory)->create_context = smx_ctx_lua_create_context; (*factory)->finalize = smx_ctx_lua_factory_finalize; (*factory)->free = smx_ctx_lua_free; - (*factory)->start = smx_ctx_lua_start; (*factory)->stop = smx_ctx_lua_stop; (*factory)->suspend = smx_ctx_lua_suspend; (*factory)->resume = smx_ctx_lua_resume; @@ -107,8 +104,20 @@ smx_ctx_lua_create_context(xbt_main_func_t code, int argc, char** argv, /* start the coroutine in charge of running that code */ context->state = lua_newthread(lua_state); context->ref = luaL_ref(lua_state, LUA_REGISTRYINDEX); // protect the thread from being garbage collected - /* the actual co-routine starting is done in smx_ctx_lua_start */ - context->nargs = argc-1; + + /* Start the co-routine */ + lua_getglobal(context->state,context->argv[0]); + xbt_assert1(lua_isfunction(context->state,-1), + "The lua function %s does not seem to exist",context->argv[0]); + + // push arguments onto the stack + int i; + for(i=1;iargc;i++) + lua_pushstring(context->state,context->argv[i]); + + // Call the function (in resume) + context->nargs = context->argc-1; + } else { INFO0("Created context for maestro"); } @@ -141,24 +150,6 @@ static void smx_ctx_lua_free(smx_context_t pcontext) } } -static void smx_ctx_lua_start(smx_context_t pcontext) { - smx_ctx_lua_t context = (smx_ctx_lua_t)pcontext; - - DEBUG1("Starting '%s'",context->argv[0]); - - lua_getglobal(context->state,context->argv[0]); - xbt_assert1(lua_isfunction(context->state,-1), - "The lua function %s does not seem to exist",context->argv[0]); - - // push arguments onto the stack - int i; - for(i=1;iargc;i++) - lua_pushstring(context->state,context->argv[i]); - - // Call the function - context->nargs = context->argc-1; -} - static void smx_ctx_lua_stop(smx_context_t pcontext) { smx_ctx_lua_t context = (smx_ctx_lua_t)pcontext; @@ -183,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);