[Tarantool-patches] [PATCH 1/2] src/lua: fix running init lua script
Leonid Vasiliev
lvasiliev at tarantool.org
Thu Dec 10 20:38:41 MSK 2020
Hi! Thank you for the patch.
LGTM
On 09.12.2020 22:28, Artem Starshov wrote:
> When tarantool launched with -e flag
> and in script after there is an error,
> programm hangs. This happens because
> shed fiber launches separate fiber for
> init user script and starts auxiliary event
> loop. It's supposed that fiber will stop this
> loop, but in case of error in script, fiber tries
> to stop a loop when the last one isn't started yet.
Nice stairs)
>
> Added a flag, which will watch is loop started and
> when fiber tries to call `ev_break()` we can be sure
> that loop is runnig already.
>
> Part of #4983
Closes.
> ---
> src/lua/init.c | 9 +++++++++
> 1 file changed, 9 insertions(+)
>
> diff --git a/src/lua/init.c b/src/lua/init.c
> index a0b2fc775..92bdb82c0 100644
> --- a/src/lua/init.c
> +++ b/src/lua/init.c
> @@ -569,6 +569,7 @@ run_script_f(va_list ap)
> * never really dead. It never returns from its function.
> */
> struct diag *diag = va_arg(ap, struct diag *);
> + bool aux_loop_is_run = false;
>
> /*
> * Load libraries and execute chunks passed by -l and -e
> @@ -611,6 +612,7 @@ run_script_f(va_list ap)
> * loop and re-schedule this fiber.
> */
> fiber_sleep(0.0);
> + aux_loop_is_run = true;
>
> if (path && strcmp(path, "-") != 0 && access(path, F_OK) == 0) {
> /* Execute script. */
> @@ -650,6 +652,13 @@ run_script_f(va_list ap)
> * return control back to tarantool_lua_run_script.
> */
> end:
> + /*
> + * Auxiliary loop in tarantool_lua_run_script
> + * should start (ev_run()) before this fiber
> + * invokes ev_break().
> + */
> + if (!aux_loop_is_run)
> + fiber_sleep(0.0);
> ev_break(loop(), EVBREAK_ALL);
> return 0;
>
>
More information about the Tarantool-patches
mailing list