[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