commit 859081df55ad5462f45ef463ff2f87d62cfe541a from: Maksim Tiushev via: Sergey Kaplun date: Fri Aug 09 09:34:09 2024 UTC refactor: use Lua C API instead of G(L) To ensure better encapsulation, maintainability, and portability of the code, it is necessary to replace direct access to the fields of global structures with calls using the Lua C API. Closes #10284 NO_DOC=refactoring NO_TEST=refactoring NO_CHANGELOG=refactoring (cherry picked from commit f7bb3fc7a1222107753dc420675ecda043b0a5d2) commit - 5e3ed27ca3a9a5ec9b82211b7c3e1131b6446082 commit + 859081df55ad5462f45ef463ff2f87d62cfe541a blob - 2e380a389650e5c5cf6b59103523dba7113d9ab9 blob + 21fb2136d6e62c14fb86dde4b5f344542b133915 --- src/box/lua/info.c +++ src/box/lua/info.c @@ -475,7 +475,7 @@ lbox_info_memory_call(struct lua_State *L) lua_settable(L, -3); lua_pushstring(L, "lua"); - lua_pushinteger(L, G(L)->gc.total); + lua_pushinteger(L, luaL_getgctotal(L)); lua_settable(L, -3); return 1; blob - 309d2b1f55743e9d1455299fc7513ff5457993f0 blob + e128b0ade0023967c6c82eafecdddf14178ed394 --- src/box/lua/slab.cc +++ src/box/lua/slab.cc @@ -259,7 +259,7 @@ lbox_runtime_info(struct lua_State *L) * Lua GC heap size */ lua_pushstring(L, "lua"); - lua_pushinteger(L, G(L)->gc.total); + lua_pushinteger(L, luaL_getgctotal(L)); lua_settable(L, -3); luaL_pushuint64(L, tuple_runtime_memory_used()); blob - bbb1bd8d45947afa954e2295c76ce6b07287b1c0 blob + 5c37d43a3c5807fbe4203c5939c8f5bdf6ea06e4 --- src/lua/utils.c +++ src/lua/utils.c @@ -378,6 +378,12 @@ luaL_setcdatagc(struct lua_State *L, int idx) /* Pop finalizer */ lua_pop(L, 1); +} + +size_t +luaL_getgctotal(struct lua_State *L) +{ + return (lua_getgccount(L) * 1024ULL) + lua_gc(L, LUA_GCCOUNTB, 0); } /** blob - 21a2486ce8496a02c52ebb251ae43fb921ecfea4 blob + 7958e61327b3df5b0acbe10811d968e3d5f0bef6 --- src/lua/utils.h +++ src/lua/utils.h @@ -217,6 +217,13 @@ LUA_API void luaL_setcdatagc(struct lua_State *L, int idx); /** + * @brief Return size of currently allocated memory. + * @param L Lua State + */ +size_t +luaL_getgctotal(struct lua_State *L); + +/** * @brief Return CTypeID (FFI) of given СDATA type * @param L Lua State * @param ctypename С type name as string (e.g. "struct request" or "uint32_t")