From ba42fcd064c3f371610126dee6f25c2d7f1e4040 Mon Sep 17 00:00:00 2001 From: Thierry FOURNIER Date: Sun, 27 May 2018 00:59:48 +0200 Subject: [PATCH] BUG/MEDIUM: lua/socket: Notification error Each time the send function yields, a notification must be registered. Without this notification, the task is never wakeup when data arrives. Today, the notification is registered only if the buffer is not available. Other cases like the buffer is too small for all data are not processed. This patch must be backported in 1.6, 1.7 and 1.8 --- src/hlua.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/hlua.c b/src/hlua.c index 48de5cba55..5d49d3c038 100644 --- a/src/hlua.c +++ b/src/hlua.c @@ -1956,10 +1956,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) { - 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")); - } goto hlua_socket_write_yield_return; } @@ -2002,6 +1998,10 @@ static int hlua_socket_write_yield(struct lua_State *L,int status, lua_KContext } hlua_socket_write_yield_return: + 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")); + } xref_unlock(&socket->xref, peer); WILL_LJMP(hlua_yieldk(L, 0, 0, hlua_socket_write_yield, TICK_ETERNITY, 0)); return 0; -- 2.47.3