mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-08-10 17:17:06 +02:00
BUG/MAJOR: lua: scheduled task is freezing.
Since commit 'MAJOR: task: task scheduler rework'
0194897e54
. 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]
This commit is contained in:
parent
00bc3cb59f
commit
253e53e661
12
src/hlua.c
12
src/hlua.c
@ -5360,12 +5360,6 @@ static struct task *hlua_process_task(struct task *task)
|
|||||||
struct hlua *hlua = task->context;
|
struct hlua *hlua = task->context;
|
||||||
enum hlua_exec status;
|
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
|
/* If it is the first call to the task, we must initialize the
|
||||||
* execution timeouts.
|
* 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. */
|
case HLUA_E_AGAIN: /* co process or timeout wake me later. */
|
||||||
if (hlua->wake_time != TICK_ETERNITY)
|
if (hlua->wake_time != TICK_ETERNITY)
|
||||||
task_schedule(task, hlua->wake_time);
|
task->expire = hlua->wake_time;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/* finished with error. */
|
/* finished with error. */
|
||||||
@ -5394,6 +5388,7 @@ static struct task *hlua_process_task(struct task *task)
|
|||||||
hlua_ctx_destroy(hlua);
|
hlua_ctx_destroy(hlua);
|
||||||
task_delete(task);
|
task_delete(task);
|
||||||
task_free(task);
|
task_free(task);
|
||||||
|
task = NULL;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case HLUA_E_ERR:
|
case HLUA_E_ERR:
|
||||||
@ -5402,9 +5397,10 @@ static struct task *hlua_process_task(struct task *task)
|
|||||||
hlua_ctx_destroy(hlua);
|
hlua_ctx_destroy(hlua);
|
||||||
task_delete(task);
|
task_delete(task);
|
||||||
task_free(task);
|
task_free(task);
|
||||||
|
task = NULL;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return NULL;
|
return task;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This function is an LUA binding that register LUA function to be
|
/* This function is an LUA binding that register LUA function to be
|
||||||
|
Loading…
Reference in New Issue
Block a user