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);
(*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;
/* 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;i<context->argc;i++)
+ lua_pushstring(context->state,context->argv[i]);
+
+ // Call the function (in resume)
+ context->nargs = context->argc-1;
+
} else {
INFO0("Created context for maestro");
}
}
}
-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;i<context->argc;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;
}
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);