From 086b4dde18a29afefccac8861915b8c6b99b3b9a Mon Sep 17 00:00:00 2001 From: Oleg Babin <babinoleg@mail.ru> Date: Mon, 30 May 2022 07:59:21 +0300 Subject: [PATCH] fiber: don't skip fiber_obj:info() arguments Commit b18dd47f50e8 ("Introduce backtrace=true option to fiber.info()") introduced a way to skip backtraces in fiber.info() calls. Commit 9da7e03e88e2 ("fiber: introduce fiber_o:info() and fiber_o:csw()") introduced `options` function for fiber object however it ignored passed options. This patch fixed it. Currently fiber:info({backtrace = false}) returns info without backtrace. Closes #7210 NO_DOC=bugfix (cherry picked from commit 0eac13b90064b9a84cd84335374712026bd044c6) --- .../gh-7210-backtrace-for-fiber_obj-info.md | 3 +++ src/lua/fiber.c | 14 +++++++------- .../gh_7210_backtrace_for_fiber_obj_info_test.lua | 8 ++++++++ 3 files changed, 18 insertions(+), 7 deletions(-) create mode 100644 changelogs/unreleased/gh-7210-backtrace-for-fiber_obj-info.md create mode 100644 test/app-luatest/gh_7210_backtrace_for_fiber_obj_info_test.lua diff --git a/changelogs/unreleased/gh-7210-backtrace-for-fiber_obj-info.md b/changelogs/unreleased/gh-7210-backtrace-for-fiber_obj-info.md new file mode 100644 index 0000000000..7e13b648ed --- /dev/null +++ b/changelogs/unreleased/gh-7210-backtrace-for-fiber_obj-info.md @@ -0,0 +1,3 @@ +## bugfix/lua + +* Fixed case when fiber_obj:info() ignored options (gh-7210). diff --git a/src/lua/fiber.c b/src/lua/fiber.c index 1fd74a6844..6d356cb0ce 100644 --- a/src/lua/fiber.c +++ b/src/lua/fiber.c @@ -317,15 +317,15 @@ lbox_fiber_top_disable(struct lua_State *L) #ifdef ENABLE_BACKTRACE bool -lbox_do_backtrace(struct lua_State *L) +lbox_do_backtrace(struct lua_State *L, int index) { - if (lua_istable(L, 1)) { + if (lua_istable(L, index)) { lua_pushstring(L, "backtrace"); - lua_gettable(L, 1); - if (lua_isnil(L, -1)){ + lua_gettable(L, index); + if (lua_isnil(L, -1)) { lua_pop(L, 1); lua_pushstring(L, "bt"); - lua_gettable(L, 1); + lua_gettable(L, index); } if (!lua_isnil(L, -1)) return lua_toboolean(L, -1); @@ -358,7 +358,7 @@ static int lbox_fiber_info(struct lua_State *L) { #ifdef ENABLE_BACKTRACE - bool do_backtrace = lbox_do_backtrace(L); + bool do_backtrace = lbox_do_backtrace(L, 1); if (do_backtrace) { lua_newtable(L); fiber_stat(lbox_fiber_statof_bt, L); @@ -519,7 +519,7 @@ lbox_fiber_object_info(struct lua_State *L) if (f == NULL) luaL_error(L, "the fiber is dead"); #ifdef ENABLE_BACKTRACE - bool do_backtrace = lbox_do_backtrace(L); + bool do_backtrace = lbox_do_backtrace(L, 2); if (do_backtrace) { lua_newtable(L); lbox_fiber_statof_map(f, L, true); diff --git a/test/app-luatest/gh_7210_backtrace_for_fiber_obj_info_test.lua b/test/app-luatest/gh_7210_backtrace_for_fiber_obj_info_test.lua new file mode 100644 index 0000000000..ae5f99e539 --- /dev/null +++ b/test/app-luatest/gh_7210_backtrace_for_fiber_obj_info_test.lua @@ -0,0 +1,8 @@ +local fiber = require('fiber') +local t = require('luatest') +local g = t.group() + +g.test_backtrace_option_for_fiber_obj = function() + t.assert_equals(fiber.self():info({backtrace = false}).backtrace, nil) + t.assert_equals(fiber.self():info({bt = false}).backtrace, nil) +end -- GitLab