diff --git a/test/unit/CMakeLists.txt b/test/unit/CMakeLists.txt index 39363cc06dd2044530fa3fd48bbf20958746b4b2..bdbdf4dd6a5c59f1edb46e1c15643acbe2ca9c08 100644 --- a/test/unit/CMakeLists.txt +++ b/test/unit/CMakeLists.txt @@ -68,6 +68,7 @@ add_executable(xrow.test xrow.cc unit.c target_link_libraries(xrow.test server misc ${MSGPUCK_LIBRARIES}) add_executable(fiber.test fiber.cc unit.c) +set_source_files_properties(fiber.cc PROPERTIES COMPILE_FLAGS -O0) target_link_libraries(fiber.test core) if (NOT ENABLE_GCOV) diff --git a/test/unit/fiber.cc b/test/unit/fiber.cc index eee80df6cef152bf30cda9116e79c848e85e3537..2e75e58337481f6aefb016ccab17434493259ec9 100644 --- a/test/unit/fiber.cc +++ b/test/unit/fiber.cc @@ -1,6 +1,7 @@ #include "memory.h" #include "fiber.h" #include "unit.h" +#include "trivia/util.h" static int noop_f(va_list ap) @@ -48,13 +49,14 @@ cancel_dead_f(va_list ap) static size_t fiber_stack_size_default; -static void +static void NOINLINE stack_expand(void *ptr) { char buf[2048]; - memset(buf, 0, 2048); - long int stack_diff = (long int)(buf - (char *)ptr); - if (abs(stack_diff) < (long int)fiber_stack_size_default) + memset(buf, 0x45, 2048); + ptrdiff_t stack_diff = (buf - (char *)ptr); + stack_diff = stack_diff >= 0 ? stack_diff : -stack_diff; + if (stack_diff < (ptrdiff_t)fiber_stack_size_default) stack_expand(ptr); }