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;
|
||||
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
|
||||
|
|
Loading…
Reference in New Issue