Fix stack overflow bug of uloop lua binding.
authorXiongfei Guo <xfguo@credosemi.com>
Fri, 20 Jun 2014 10:31:17 +0000 (10:31 +0000)
committerJohn Crispin <blogic@openwrt.org>
Tue, 24 Jun 2014 13:30:30 +0000 (14:30 +0100)
The static variable `state` in `lua/uloop.c` should be clean after every callback.

Signed-off-by: Xiongfei(Alex) Guo <xfguo@credosemi.com>
lua/uloop.c

index 51f53c210f9786f604978c3e830bc74ee4790cee..5922e0470697186a7920693a7e760a0b9cb21602 100644 (file)
@@ -43,6 +43,7 @@ static void ul_timer_cb(struct uloop_timeout *t)
 
        lua_getglobal(state, "__uloop_cb");
        lua_rawgeti(state, -1, tout->r);
+       lua_remove(state, -2);
        lua_call(state, 0, 0);
 }
 
@@ -133,6 +134,7 @@ static void ul_process_cb(struct uloop_process *p, int ret)
        lua_getglobal(state, "__uloop_cb");
        lua_rawgeti(state, -1, proc->r);
        luaL_unref(state, -2, proc->r);
+       lua_remove(state, -2);
        lua_pushinteger(state, ret >> 8);
        lua_call(state, 1, 0);
 }