[Tarantool-patches] [PATCH] lua: lua_field_inspect_table without pushcfunction
Igor Munkin
imun at tarantool.org
Tue Jun 2 12:36:39 MSK 2020
OK, it was too late at night (or too early at morning), sorry.
On 02.06.20, Igor Munkin wrote:
> Sergey,
>
> Thanks for the patch! Please consider my comments below.
>
> On 18.05.20, Sergey Kaplun wrote:
> > Currently on encoding table we push cfunction (lua_field_try_serialize)
> > to lua stack with additional lightuserdata and table value and after
> > pcall that function to avoid a raise of error.
> >
> > In this case LuaJIT creates new object which will not live long time,
>
> <lua_pushlightuserdata> just assigns a pointer to the top guest stack
> slot. Yes, it might trigger stack reallocation, but no GC object is
> created.
Yes creating a Lua function object with <lua_field_try_serialize>
payload definitely clobbers GC.
>
<snipped>
>
> Well, let's polish the commit message to make it a bit clearer. Commit
> subject also looks non-informative and doesn't respect our contribution
> guide[2], so I propose the following rewording:
> | lua: remove excess Lua call from table encoding
> |
> | For safe table encoding <lua_field_try_serialize> function is pushed
> | to Lua stack along with auxiliary lightuserdata and table object to be
> | encoded. Its further protected call catches Lua error if one is raised
> | while encoding. It is only necessary when the object to be serialized
> | has __serialize field in metatable and this field is a Lua function.
> |
> | As a result of this change the function serializing the given object
> | is called without excess protected frame and auxiliary status struct.
Added this point to the last part:
| This change reduces GC usage since a Lua function object is not
| created. Moreover the function serializing the given object is called
| without excess protected frame and auxiliary status struct.
> Feel free to change it on your own.
>
<snipped>
>
> --
> Best regards,
> IM
--
Best regards,
IM
More information about the Tarantool-patches
mailing list