cc: Haproxy `hlua_socket_close` expected exactly one argument on stack. But when it was called from `hlua_socket_write_yield`, it found more than one argument on stack and threw an error.
This patch introduced new helper function `hlua_socket_close_helper`, which doesn't check arguments count. Please let me know if you need more information. Thanks, Sada. On Wed, Apr 25, 2018 at 10:51 AM, Thierry Fournier <tfourn...@arpalert.org> wrote: > Hi, > > do you have a little bit of context. It is not easy to read a patch without > the associated explanation. > > Thanks, > Thierry > > > > On 14 Apr 2018, at 01:56, sada <s...@signalsciences.com> wrote: > > --- > src/hlua.c | 14 ++++++++++---- > 1 file changed, 10 insertions(+), 4 deletions(-) > > diff --git a/src/hlua.c b/src/hlua.c > index 60cf8f94..0585a1e7 100644 > --- a/src/hlua.c > +++ b/src/hlua.c > @@ -1629,14 +1629,12 @@ __LJMP static int hlua_socket_gc(lua_State *L) > /* The close function send shutdown signal and break the > * links between the stream and the object. > */ > -__LJMP static int hlua_socket_close(lua_State *L) > +__LJMP static int hlua_socket_close_helper(lua_State *L) > { > struct hlua_socket *socket; > struct appctx *appctx; > struct xref *peer; > > - MAY_LJMP(check_args(L, 1, "close")); > - > socket = MAY_LJMP(hlua_checksocket(L, 1)); > > /* Check if we run on the same thread than the xreator thread. > @@ -1659,6 +1657,14 @@ __LJMP static int hlua_socket_close(lua_State *L) > return 0; > } > > +/* The close function calls close_helper. > + */ > +__LJMP static int hlua_socket_close(lua_State *L) > +{ > + MAY_LJMP(check_args(L, 1, "close")); > + return hlua_socket_close_helper(L); > +} > + > /* This Lua function assumes that the stack contain three parameters. > * 1 - USERDATA containing a struct socket > * 2 - INTEGER with values of the macro defined below > @@ -1990,7 +1996,7 @@ static int hlua_socket_write_yield(struct lua_State > *L,int status, lua_KContext > if (len == -1) > s->req.flags |= CF_WAKE_WRITE; > > - MAY_LJMP(hlua_socket_close(L)); > + MAY_LJMP(hlua_socket_close_helper(L)); > lua_pop(L, 1); > lua_pushinteger(L, -1); > xref_unlock(&socket->xref, peer); > -- > 2.17.0 > > >