From: Artem Starshov <artemreyt@tarantool.org> To: Alexander Turenko <alexander.turenko@tarantool.org> Cc: tarantool-patches@dev.tarantool.org Subject: [Tarantool-patches] [PATCH 1/2] src/lua: fix running init lua script Date: Wed, 9 Dec 2020 22:28:35 +0300 [thread overview] Message-ID: <cd7ede5853dc71d61a80c4e9d2ed634958734df9.1607541187.git.artemreyt@tarantool.org> (raw) In-Reply-To: <cover.1607541187.git.artemreyt@tarantool.org> 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. 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 --- 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; -- 2.28.0
next prev parent reply other threads:[~2020-12-09 19:28 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 ` Artem Starshov [this message] 2020-12-10 17:38 ` [Tarantool-patches] [PATCH 1/2] src/lua: fix running init lua script Leonid Vasiliev 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=cd7ede5853dc71d61a80c4e9d2ed634958734df9.1607541187.git.artemreyt@tarantool.org \ --to=artemreyt@tarantool.org \ --cc=alexander.turenko@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