From c7c9d420f2bf8514ae1eca2124c4ef19219cdf27 Mon Sep 17 00:00:00 2001 From: Iskander Sagitov <i.sagitov@tarantool.org> Date: Fri, 14 May 2021 10:19:31 +0300 Subject: [PATCH] fiber: set fiber->csw = 0 for every creating fiber It is strange to create a new fiber and see that it has yielded 100 times, when in fact it never actually did it. The patch makes fiber->csw = 0 for each created fiber. Follow-up #5799 --- changelogs/unreleased/gh-5799-set-csw-is-0-for-new-fibers.md | 3 +++ src/lib/core/fiber.c | 1 + test/app/gh-5799-fiber-info.result | 4 +--- test/app/gh-5799-fiber-info.test.lua | 4 +--- 4 files changed, 6 insertions(+), 6 deletions(-) create mode 100644 changelogs/unreleased/gh-5799-set-csw-is-0-for-new-fibers.md diff --git a/changelogs/unreleased/gh-5799-set-csw-is-0-for-new-fibers.md b/changelogs/unreleased/gh-5799-set-csw-is-0-for-new-fibers.md new file mode 100644 index 0000000000..c48eb36d97 --- /dev/null +++ b/changelogs/unreleased/gh-5799-set-csw-is-0-for-new-fibers.md @@ -0,0 +1,3 @@ +## feature/fiber + +* Previously csw (Context SWitch) of new fiber can be more than 0, now it is always 0 (gh-5799). diff --git a/src/lib/core/fiber.c b/src/lib/core/fiber.c index 216f8be5df..759c7da6a7 100644 --- a/src/lib/core/fiber.c +++ b/src/lib/core/fiber.c @@ -1260,6 +1260,7 @@ fiber_new_ex(const char *name, const struct fiber_attr *fiber_attr, fiber->fid = cord->next_fid; fiber_set_name(fiber, name); register_fid(fiber); + fiber->csw = 0; cord->next_fid++; assert(cord->next_fid > FIBER_ID_MAX_RESERVED); diff --git a/test/app/gh-5799-fiber-info.result b/test/app/gh-5799-fiber-info.result index 716ac9a246..7012395729 100644 --- a/test/app/gh-5799-fiber-info.result +++ b/test/app/gh-5799-fiber-info.result @@ -26,11 +26,9 @@ test_run:cmd('setopt delimiter ";"') | ... for i=1,100 do fibers[i] = fiber.new(function() - local start_csw = fiber.info()[fiber.self():id()].csw for j=1,10 do fiber.yield() - if j + start_csw == fiber.self():csw() and - j + start_csw == fiber.self():info().csw then + if j == fiber.self():csw() and j == fiber.self():info().csw then csw_check_counter = csw_check_counter + 1 end end diff --git a/test/app/gh-5799-fiber-info.test.lua b/test/app/gh-5799-fiber-info.test.lua index 588f760c40..ff4df3b638 100644 --- a/test/app/gh-5799-fiber-info.test.lua +++ b/test/app/gh-5799-fiber-info.test.lua @@ -10,11 +10,9 @@ fibers = {} test_run:cmd('setopt delimiter ";"') for i=1,100 do fibers[i] = fiber.new(function() - local start_csw = fiber.info()[fiber.self():id()].csw for j=1,10 do fiber.yield() - if j + start_csw == fiber.self():csw() and - j + start_csw == fiber.self():info().csw then + if j == fiber.self():csw() and j == fiber.self():info().csw then csw_check_counter = csw_check_counter + 1 end end -- GitLab