From d1f0f51b09fa677cda97b45694d3def54864d195 Mon Sep 17 00:00:00 2001 From: lizzie Date: Tue, 13 Jan 2026 23:34:15 +0000 Subject: [PATCH] inline stack and rewind stack --- src/common/fiber.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/common/fiber.cpp b/src/common/fiber.cpp index 920105b2e8..213a03e8f7 100644 --- a/src/common/fiber.cpp +++ b/src/common/fiber.cpp @@ -15,13 +15,15 @@ namespace Common { -constexpr std::size_t default_stack_size = 512 * 1024; +constexpr size_t DEFAULT_STACK_SIZE = 512 * 1024; +constexpr u32 CANARY_VALUE = 0xDEADBEEF; struct Fiber::FiberImpl { - FiberImpl() : stack(default_stack_size), rewind_stack(default_stack_size) {} + FiberImpl() {} - std::vector stack; - std::vector rewind_stack; + std::array stack{}; + std::array rewind_stack{}; + u32 canary = CANARY_VALUE; boost::context::detail::fcontext_t context{}; boost::context::detail::fcontext_t rewind_context{}; @@ -49,6 +51,7 @@ Fiber::Fiber(std::function&& entry_point_func) : impl{std::make_uniquecontext = boost::context::detail::make_fcontext(stack_base, impl->stack.size(), [](boost::context::detail::transfer_t transfer) -> void { auto* fiber = static_cast(transfer.data); ASSERT(fiber && fiber->impl && fiber->impl->previous_fiber && fiber->impl->previous_fiber->impl); + ASSERT(fiber->canary == CANARY_VALUE); fiber->impl->previous_fiber->impl->context = transfer.fctx; fiber->impl->previous_fiber->impl->guard.unlock(); fiber->impl->previous_fiber.reset();