From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Date: Wed, 6 Feb 2019 15:26:58 +0300 From: Vladimir Davydov Subject: Re: [PATCH] lua: fix tarantool -e "os.exit()" hang. Message-ID: <20190206122658.fquxeryq5q4q7pnf@esperanza> References: <20190206113618.47290-1-sergepetrenko@tarantool.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20190206113618.47290-1-sergepetrenko@tarantool.org> To: Serge Petrenko Cc: tarantool-patches@freelists.org List-ID: On Wed, Feb 06, 2019 at 02:36:18PM +0300, Serge Petrenko wrote: > After the patch which made os.exit() execute on_shutdown triggers > (see commit 6dc4c8d7b5b40d66fe0451ef4d1f4bdf4d2cf60e) we relied > on on_shutdown triggers to break the ev_loop and exit tarantool. > Hovewer, there is an auxiliary event loop which is run in > tarantool_lua_run_script() to reschedule the fiber executing chunks > of code passed by -e option and executing interactive mode. > This event loop is started only to execute interactive mode, and > doesn't exist during execution of -e chunks. Make sure we don't start > it if os.exit() was already executed in one of the chunks. > > Closes #3966 > --- > https://github.com/tarantool/tarantool/issues/3966 > https://github.com/tarantool/tarantool/tree/sp/gh-3966-os-exit-hang > > src/lua/init.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/src/lua/init.c b/src/lua/init.c > index ca4b47f3a..d18c8af94 100644 > --- a/src/lua/init.c > +++ b/src/lua/init.c > @@ -664,7 +664,8 @@ tarantool_lua_run_script(char *path, bool interactive, > * Run an auxiliary event loop to re-schedule run_script fiber. > * When this fiber finishes, it will call ev_break to stop the loop. > */ > - ev_run(loop(), 0); > + if (start_loop) > + ev_run(loop(), 0); > /* The fiber running the startup script has ended. */ > script_fiber = NULL; > } Please add a test. You might want to take a look at box-py/args.test.py