MINOR: add hlua_yield_asap() helper
When called, this function will try to enforce a yield (if available) as soon as possible. Indeed, automatic yield is already enforced every X Lua instructions. However, there may be some cases where we know after running heavy operation that we should yield already to avoid taking too much CPU at once. This is what this function offers, instead of asking the user to manually yield using "core.yield()" from Lua itself after using an expensive Lua method offered by haproxy, we can directly enforce the yield without the need to do it in the Lua script.
This commit is contained in:
parent
df50d3e39f
commit
97363015a5
@ -50,6 +50,7 @@
|
||||
#define HLUA_INIT(__hlua) do { (__hlua)->T = 0; } while(0)
|
||||
|
||||
/* Lua HAProxy integration functions. */
|
||||
void hlua_yield_asap(lua_State *L);
|
||||
const char *hlua_traceback(lua_State *L, const char* sep);
|
||||
void hlua_ctx_destroy(struct hlua *lua);
|
||||
void hlua_init();
|
||||
|
14
src/hlua.c
14
src/hlua.c
@ -1979,6 +1979,20 @@ void hlua_hook(lua_State *L, lua_Debug *ar)
|
||||
lua_sethook(hlua->T, hlua_hook, LUA_MASKRET|LUA_MASKCOUNT, hlua_get_nb_instruction(hlua));
|
||||
}
|
||||
|
||||
/* tries to yield as soon as possible if the context permits it */
|
||||
void hlua_yield_asap(lua_State *L)
|
||||
{
|
||||
struct hlua *hlua;
|
||||
|
||||
/* Get hlua struct, or NULL if we execute from main lua state */
|
||||
hlua = hlua_gethlua(L);
|
||||
if (!hlua)
|
||||
return;
|
||||
|
||||
/* enforce hook for current hlua ctx on the next Lua instruction */
|
||||
lua_sethook(hlua->T, hlua_hook, LUA_MASKCOUNT, 1);
|
||||
}
|
||||
|
||||
/* This function start or resumes the Lua stack execution. If the flag
|
||||
* "yield_allowed" if no set and the LUA stack execution returns a yield
|
||||
* The function return an error.
|
||||
|
Loading…
x
Reference in New Issue
Block a user