From: Thierry FOURNIER Date: Wed, 26 Apr 2017 12:25:58 +0000 (+0200) Subject: BUG/MEDIUM: lua: memory leak X-Git-Tag: v1.8-dev2~60 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=f3267677119430d07c0c9d75f2b5818430b99816;p=thirdparty%2Fhaproxy.git BUG/MEDIUM: lua: memory leak The priv context is not cleaned when we set a new priv context. This is caused by a stupid swap between two parameter of the luaL_unref() function. workaround: use set_priv only once when we process a stream. This patch should be backported in version 1.7 and 1.6 --- diff --git a/src/hlua.c b/src/hlua.c index 77e5a9d5cf..6ce18e1ca7 100644 --- a/src/hlua.c +++ b/src/hlua.c @@ -3310,7 +3310,7 @@ __LJMP static int hlua_applet_tcp_set_priv(lua_State *L) /* Remove previous value. */ if (hlua->Mref != -1) - luaL_unref(L, hlua->Mref, LUA_REGISTRYINDEX); + luaL_unref(L, LUA_REGISTRYINDEX, hlua->Mref); /* Get and store new value. */ lua_pushvalue(L, 2); /* Copy the element 2 at the top of the stack. */ @@ -3773,7 +3773,7 @@ __LJMP static int hlua_applet_http_set_priv(lua_State *L) /* Remove previous value. */ if (hlua->Mref != -1) - luaL_unref(L, hlua->Mref, LUA_REGISTRYINDEX); + luaL_unref(L, LUA_REGISTRYINDEX, hlua->Mref); /* Get and store new value. */ lua_pushvalue(L, 2); /* Copy the element 2 at the top of the stack. */ @@ -4860,7 +4860,7 @@ __LJMP static int hlua_set_priv(lua_State *L) /* Remove previous value. */ if (hlua->Mref != -1) - luaL_unref(L, hlua->Mref, LUA_REGISTRYINDEX); + luaL_unref(L, LUA_REGISTRYINDEX, hlua->Mref); /* Get and store new value. */ lua_pushvalue(L, 2); /* Copy the element 2 at the top of the stack. */