]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: lua: core: can yield an execution stack
authorThierry FOURNIER <tfournier@haproxy.com>
Tue, 17 Feb 2015 14:01:59 +0000 (15:01 +0100)
committerWilly Tarreau <w@1wt.eu>
Sat, 28 Feb 2015 22:12:36 +0000 (23:12 +0100)
This patch provides a yield function. This function permits to
give back the hand at the HAProxy scheduler. It is used when the
lua processing consumes a lot of time.

src/hlua.c

index 4462570d5cdc0becf6f155b940adbf228a2b1095..8b72763c8cbde0fb1840ab965caed628b07ebfa8 100644 (file)
@@ -2491,6 +2491,15 @@ static int hlua_msleep(lua_State *L)
        return MAY_LJMP(_hlua_sleep(L, delay));
 }
 
+/* This functionis an LUA binding. it permits to give back
+ * the hand at the HAProxy scheduler. It is used when the
+ * LUA processing consumes a lot of time.
+ */
+__LJMP static int hlua_yield(lua_State *L)
+{
+       return MAY_LJMP(_hlua_sleep(L, 0));
+}
+
 /* This function change the nice of the currently executed
  * task. It is used set low or high priority at the current
  * task.
@@ -3325,6 +3334,7 @@ void hlua_init(void)
        hlua_class_function(gL.T, "register_task", hlua_register_task);
        hlua_class_function(gL.T, "register_fetches", hlua_register_fetches);
        hlua_class_function(gL.T, "register_converters", hlua_register_converters);
+       hlua_class_function(gL.T, "yield", hlua_yield);
        hlua_class_function(gL.T, "set_nice", hlua_setnice);
        hlua_class_function(gL.T, "sleep", hlua_sleep);
        hlua_class_function(gL.T, "msleep", hlua_msleep);