[Tarantool-patches] [PATCH] box: remove context from stack

Alexander Turenko alexander.turenko at tarantool.org
Thu Jul 1 15:34:34 MSK 2021


On Tue, Jun 09, 2020 at 01:35:18PM +0300, Maria Khaydich wrote:
> 
> I suppose no tests are needed since this one is pretty straightforward.
> ----------------------------------------------------------------------
>  
> Lua stack was broken because we forgot to clear the context
> in case of an error when return value of called function was
> not serializable.
>  
> Closes #4617
> ---
> Branch:
> https://github.com/tarantool/tarantool/compare/eljashm/gh-4617-broken-lua-stack  
> Issue:
> https://github.com/tarantool/tarantool/issues/4617  
>  
> @ChangeLog
> Remove context from lua stack in case of an error.

Here we describe changes for a user (in the way a user may understand
it). For complex bugs we can briefly describe a situation, when it
occurs.

It is now in the changelogs/ directory.

>  
>  src/box/lua/call.c | 1 +
>  1 file changed, 1 insertion(+)
> diff --git a/src/box/lua/call.c b/src/box/lua/call.c
> index 6588ec2fa..7ab49983d 100644
> --- a/src/box/lua/call.c
> +++ b/src/box/lua/call.c
> @@ -436,6 +436,7 @@ port_lua_do_dump(struct port *base, struct mpstream *stream,
>      int top = lua_gettop(L);
>      if (lua_cpcall(L, handler, &ctx) != 0) {
>          luaT_toerror(port->L);
> +        lua_pop(L, 1); 

There are several doubts and thoughts around it:

1. lua_cpcall() always removes arguments from the Lua stack (in case of
   an error too). How we can observe this ctx userdata on tarantool_L
   without yield in encode_lua_call()?
2. luaT_toerror() leans on luaT_tolstring(), so it duplicates a string
   with the error message. Should not we pop two elements in the case? I
   would just call lua_settop().
3. The clash is due to tarantool_L usage (see 1.10.1-48-g18d87adf3). Is
   there any real reason why we can't use port->L here?

CCed Igor and Sergey to think around together.

>          return -1;
>      }
>      lua_settop(L, top);
> -- 
> 2.24.0



More information about the Tarantool-patches mailing list