Tarantool development patches archive
 help / color / mirror / Atom feed
From: Leonid Vasiliev <lvasiliev@tarantool.org>
To: Artem Starshov <artemreyt@tarantool.org>,
	Alexander Turenko <alexander.turenko@tarantool.org>
Cc: tarantool-patches@dev.tarantool.org
Subject: Re: [Tarantool-patches] [PATCH 1/2] src/lua: fix running init lua script
Date: Thu, 10 Dec 2020 20:38:41 +0300	[thread overview]
Message-ID: <b17daf6f-cdf8-a966-779a-5018fa5105d7@tarantool.org> (raw)
In-Reply-To: <cd7ede5853dc71d61a80c4e9d2ed634958734df9.1607541187.git.artemreyt@tarantool.org>

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;
>   
> 

  reply	other threads:[~2020-12-10 17:39 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-12-09 19:28 [Tarantool-patches] [PATCH 0/2] tarantool -e 'assert(false)' hangs Artem Starshov
2020-12-09 19:28 ` [Tarantool-patches] [PATCH 1/2] src/lua: fix running init lua script Artem Starshov
2020-12-10 17:38   ` Leonid Vasiliev [this message]
2020-12-10 17:42     ` Leonid Vasiliev
2020-12-09 19:28 ` [Tarantool-patches] [PATCH 2/2] test: add test for tarantool -e assert(false) Artem Starshov
2020-12-10 18:11   ` Leonid Vasiliev
2020-12-14 14:11     ` Artem
2020-12-10 17:33 ` [Tarantool-patches] [PATCH 0/2] tarantool -e 'assert(false)' hangs Leonid Vasiliev

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=b17daf6f-cdf8-a966-779a-5018fa5105d7@tarantool.org \
    --to=lvasiliev@tarantool.org \
    --cc=alexander.turenko@tarantool.org \
    --cc=artemreyt@tarantool.org \
    --cc=tarantool-patches@dev.tarantool.org \
    --subject='Re: [Tarantool-patches] [PATCH 1/2] src/lua: fix running init lua script' \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox