core: introduce parent backtrace collection
With backtrace implementation reworked in afc100d, we can now efficiently collect unwinding information about parents at fiber creation time: * Add `core_backtrace_cat` helper for concatenating backtraces. * Add 'parent_bt' field to `struct fiber` for storing fiber parent's backtrace. * Add `fiber_parent_backtrace_enabled` and corresponding C/Lua toggles for controlling parent backtrace collection for newly created fibers. Closes #4002 @TarantoolBot document Title: new handles for fiber parent backtrace feature local fiber = require('fiber') local log = require('log') local yaml = require('yaml') local function foo() log.info("%s", yaml.encode(fiber.info()[fiber.self()[id]].backtrace)) end -- Parent backtrace collection feature is disable by default. fiber.parent_backtrace_enable() -- Backtrace will contain also parent's backtrace. fiber.create(foo) fiber.parent_backtrace_disable() -- Backtrace will not contain parent's backtrace. fiber.create(foo) local function bar() -- Fibers created before enabling parent backtrace feature will not be -- contained in backtrace. fiber.parent_backtrace_enable() fiber.create(foo) end -- Grandchild will not contain child's backtrace. fiber.create(bar)
Showing
- changelogs/unreleased/fiber-parent-backtrace.md 5 additions, 0 deletionschangelogs/unreleased/fiber-parent-backtrace.md
- src/lib/core/fiber.c 27 additions, 1 deletionsrc/lib/core/fiber.c
- src/lib/core/fiber.h 24 additions, 0 deletionssrc/lib/core/fiber.h
- src/lua/backtrace.c 11 additions, 0 deletionssrc/lua/backtrace.c
- src/lua/backtrace.h 6 additions, 0 deletionssrc/lua/backtrace.h
- src/lua/fiber.c 30 additions, 0 deletionssrc/lua/fiber.c
- test/app-luatest/fiber_parent_backtrace_test.lua 74 additions, 0 deletionstest/app-luatest/fiber_parent_backtrace_test.lua
Loading
Please register or sign in to comment