From fa80297f80728ec96b015b3f569695ff39750427 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BD=97=E6=B3=BD=E8=BD=A9?= <spacewanderlzx@gmail.com> Date: Wed, 9 Dec 2020 01:46:21 +0800 Subject: [PATCH] lua: update deprecated lua_open to luaL_newstate (#14297) lua_open is deprecated in Lua 5.1 and removed in the later version, though LuaJIT might keep the API unchanged. In LuaJIT, lua_open is just an alias of luaL_newstate. Signed-off-by: spacewander <spacewanderlzx@gmail.com> --- source/extensions/filters/common/lua/lua.cc | 6 ++++-- test/extensions/filters/http/lua/lua_integration_test.cc | 4 +++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/source/extensions/filters/common/lua/lua.cc b/source/extensions/filters/common/lua/lua.cc index f23f968c9e7f..a5b1f76e81ed 100644 --- a/source/extensions/filters/common/lua/lua.cc +++ b/source/extensions/filters/common/lua/lua.cc @@ -52,7 +52,7 @@ ThreadLocalState::ThreadLocalState(const std::string& code, ThreadLocal::SlotAll : tls_slot_(ThreadLocal::TypedSlot<LuaThreadLocal>::makeUnique(tls)) { // First verify that the supplied code can be parsed. - CSmartPtr<lua_State, lua_close> state(lua_open()); + CSmartPtr<lua_State, lua_close> state(luaL_newstate()); RELEASE_ASSERT(state.get() != nullptr, "unable to create new Lua state object"); luaL_openlibs(state.get()); @@ -90,7 +90,9 @@ CoroutinePtr ThreadLocalState::createCoroutine() { return std::make_unique<Coroutine>(std::make_pair(lua_newthread(state), state)); } -ThreadLocalState::LuaThreadLocal::LuaThreadLocal(const std::string& code) : state_(lua_open()) { +ThreadLocalState::LuaThreadLocal::LuaThreadLocal(const std::string& code) + : state_(luaL_newstate()) { + RELEASE_ASSERT(state_.get() != nullptr, "unable to create new Lua state object"); luaL_openlibs(state_.get()); int rc = luaL_dostring(state_.get(), code.c_str()); diff --git a/test/extensions/filters/http/lua/lua_integration_test.cc b/test/extensions/filters/http/lua/lua_integration_test.cc index 23b4c2ebe2e6..ca675b77c42a 100644 --- a/test/extensions/filters/http/lua/lua_integration_test.cc +++ b/test/extensions/filters/http/lua/lua_integration_test.cc @@ -894,7 +894,9 @@ TEST_P(LuaIntegrationTest, BasicTestOfLuaPerRoute) { // Test whether Rds can correctly deliver LuaPerRoute configuration. TEST_P(LuaIntegrationTest, RdsTestOfLuaPerRoute) { // When the route configuration is updated dynamically via RDS and the configuration contains an -// inline Lua code, Envoy may call lua_open in multiple threads to create new lua_State objects. +// inline Lua code, Envoy may call `luaL_newstate` +// (https://www.lua.org/manual/5.1/manual.html#luaL_newstate) in multiple threads to create new +// lua_State objects. // During lua_State creation, 'LuaJIT' uses some static local variables shared by multiple threads // to aid memory allocation. Although 'LuaJIT' itself guarantees that there is no thread safety // issue here, the use of these static local variables by multiple threads will cause a TSAN alarm.