From 253e53e661c49fb9723535319cf511152bf09bc7 Mon Sep 17 00:00:00 2001 From: Emeric Brun Date: Tue, 17 Oct 2017 18:58:40 +0200 Subject: [PATCH] BUG/MAJOR: lua: scheduled task is freezing. Since commit 'MAJOR: task: task scheduler rework' 0194897e540cec67d7d1e9281648b70efe403f08. LUA's scheduling tasks are freezing. A running task should not handle the scheduling itself but let the task scheduler to handle it based on the 'expire' field. [wt: no backport needed] --- src/hlua.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/src/hlua.c b/src/hlua.c index c68495b34c..7eddda8217 100644 --- a/src/hlua.c +++ b/src/hlua.c @@ -5360,12 +5360,6 @@ static struct task *hlua_process_task(struct task *task) struct hlua *hlua = task->context; enum hlua_exec status; - /* We need to remove the task from the wait queue before executing - * the Lua code because we don't know if it needs to wait for - * another timer or not in the case of E_AGAIN. - */ - task_delete(task); - /* If it is the first call to the task, we must initialize the * execution timeouts. */ @@ -5385,7 +5379,7 @@ static struct task *hlua_process_task(struct task *task) case HLUA_E_AGAIN: /* co process or timeout wake me later. */ if (hlua->wake_time != TICK_ETERNITY) - task_schedule(task, hlua->wake_time); + task->expire = hlua->wake_time; break; /* finished with error. */ @@ -5394,6 +5388,7 @@ static struct task *hlua_process_task(struct task *task) hlua_ctx_destroy(hlua); task_delete(task); task_free(task); + task = NULL; break; case HLUA_E_ERR: @@ -5402,9 +5397,10 @@ static struct task *hlua_process_task(struct task *task) hlua_ctx_destroy(hlua); task_delete(task); task_free(task); + task = NULL; break; } - return NULL; + return task; } /* This function is an LUA binding that register LUA function to be