From af4bd0867a6ef4ca219bf97fee5205fa928be4ab Mon Sep 17 00:00:00 2001 From: Thierry FOURNIER Date: Fri, 25 May 2018 14:38:57 +0200 Subject: [PATCH] BUG/MEDIUM: lua/socket: wrong scheduling for sockets The appctx pointer is given from any variable which are wrong. This implies the wakeup of wrong applet, and the socket are no longer responsive. This behavior is hidden by another inherited error which is fixed in the next patch. This patch remove all wrong appctx affectations. This patch must be backported in 1.6, 1.7 and 1.8 --- src/hlua.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/hlua.c b/src/hlua.c index 4de5db5ac..03e961c37 100644 --- a/src/hlua.c +++ b/src/hlua.c @@ -1799,7 +1799,6 @@ no_peer: connection_empty: - appctx = objt_appctx(s->si[0].end); if (!notification_new(&hlua->com, &appctx->ctx.hlua_cosocket.wake_on_read, hlua->task)) { xref_unlock(&socket->xref, peer); WILL_LJMP(luaL_error(L, "out of memory")); @@ -1951,7 +1950,6 @@ static int hlua_socket_write_yield(struct lua_State *L,int status, lua_KContext * the request buffer if its not required. */ if (s->req.buf->size == 0) { - appctx = hlua->task->context; if (!channel_alloc_buffer(&s->req, &appctx->buffer_wait)) goto hlua_socket_write_yield_return; } @@ -1959,7 +1957,6 @@ static int hlua_socket_write_yield(struct lua_State *L,int status, lua_KContext /* Check for avalaible space. */ len = buffer_total_space(s->req.buf); if (len <= 0) { - appctx = objt_appctx(s->si[0].end); if (!notification_new(&hlua->com, &appctx->ctx.hlua_cosocket.wake_on_write, hlua->task)) { xref_unlock(&socket->xref, peer); WILL_LJMP(luaL_error(L, "out of memory"));