diff options
Diffstat (limited to '')
-rw-r--r-- | src/tests/common/fibers.cpp | 39 |
1 files changed, 21 insertions, 18 deletions
diff --git a/src/tests/common/fibers.cpp b/src/tests/common/fibers.cpp index b2ded2065..d94492fc6 100644 --- a/src/tests/common/fibers.cpp +++ b/src/tests/common/fibers.cpp @@ -67,15 +67,16 @@ void TestControl1::DoWork() { value++; } results[id] = value; - Fiber::YieldTo(work_fibers[id].get(), thread_fibers[id].get()); + Fiber::YieldTo(work_fibers[id], thread_fibers[id]); } void TestControl1::ExecuteThread(u32 id) { thread_ids.Register(id); - thread_fibers[id] = Fiber::ThreadToFiber(); + auto thread_fiber = Fiber::ThreadToFiber(); + thread_fibers[id] = thread_fiber; work_fibers[id] = std::make_shared<Fiber>(std::function<void(void*)>{WorkControl1}, this); items[id] = rand() % 256; - Fiber::YieldTo(thread_fibers[id].get(), work_fibers[id].get()); + Fiber::YieldTo(thread_fibers[id], work_fibers[id]); thread_fibers[id]->Exit(); } @@ -116,11 +117,11 @@ public: for (u32 i = 0; i < 12000; i++) { value1 += i; } - Fiber::YieldTo(fiber1.get(), fiber3.get()); + Fiber::YieldTo(fiber1, fiber3); const u32 id = thread_ids.Get(); assert1 = id == 1; value2 += 5000; - Fiber::YieldTo(fiber1.get(), thread_fibers[id].get()); + Fiber::YieldTo(fiber1, thread_fibers[id]); } void DoWork2() { @@ -128,7 +129,7 @@ public: ; value2 = 2000; trap = false; - Fiber::YieldTo(fiber2.get(), fiber1.get()); + Fiber::YieldTo(fiber2, fiber1); assert3 = false; } @@ -136,19 +137,19 @@ public: const u32 id = thread_ids.Get(); assert2 = id == 0; value1 += 1000; - Fiber::YieldTo(fiber3.get(), thread_fibers[id].get()); + Fiber::YieldTo(fiber3, thread_fibers[id]); } void ExecuteThread(u32 id); void CallFiber1() { const u32 id = thread_ids.Get(); - Fiber::YieldTo(thread_fibers[id].get(), fiber1.get()); + Fiber::YieldTo(thread_fibers[id], fiber1); } void CallFiber2() { const u32 id = thread_ids.Get(); - Fiber::YieldTo(thread_fibers[id].get(), fiber2.get()); + Fiber::YieldTo(thread_fibers[id], fiber2); } void Exit(); @@ -184,7 +185,8 @@ static void WorkControl2_3(void* control) { void TestControl2::ExecuteThread(u32 id) { thread_ids.Register(id); - thread_fibers[id] = Fiber::ThreadToFiber(); + auto thread_fiber = Fiber::ThreadToFiber(); + thread_fibers[id] = thread_fiber; } void TestControl2::Exit() { @@ -239,23 +241,23 @@ public: void DoWork1() { value1 += 1; - Fiber::YieldTo(fiber1.get(), fiber2.get()); + Fiber::YieldTo(fiber1, fiber2); const u32 id = thread_ids.Get(); value3 += 1; - Fiber::YieldTo(fiber1.get(), thread_fibers[id].get()); + Fiber::YieldTo(fiber1, thread_fibers[id]); } void DoWork2() { value2 += 1; const u32 id = thread_ids.Get(); - Fiber::YieldTo(fiber2.get(), thread_fibers[id].get()); + Fiber::YieldTo(fiber2, thread_fibers[id]); } void ExecuteThread(u32 id); void CallFiber1() { const u32 id = thread_ids.Get(); - Fiber::YieldTo(thread_fibers[id].get(), fiber1.get()); + Fiber::YieldTo(thread_fibers[id], fiber1); } void Exit(); @@ -264,7 +266,7 @@ public: u32 value2{}; u32 value3{}; ThreadIds thread_ids; - std::vector<std::unique_ptr<Common::Fiber>> thread_fibers; + std::vector<std::shared_ptr<Common::Fiber>> thread_fibers; std::shared_ptr<Common::Fiber> fiber1; std::shared_ptr<Common::Fiber> fiber2; }; @@ -281,7 +283,8 @@ static void WorkControl3_2(void* control) { void TestControl3::ExecuteThread(u32 id) { thread_ids.Register(id); - thread_fibers[id] = Fiber::ThreadToFiber(); + auto thread_fiber = Fiber::ThreadToFiber(); + thread_fibers[id] = thread_fiber; } void TestControl3::Exit() { @@ -329,7 +332,7 @@ public: void Execute() { thread_fiber = Fiber::ThreadToFiber(); - Fiber::YieldTo(thread_fiber.get(), fiber1.get()); + Fiber::YieldTo(thread_fiber, fiber1); thread_fiber->Exit(); } @@ -337,7 +340,7 @@ public: fiber1->SetRewindPoint(std::function<void(void*)>{WorkControl4}, this); if (rewinded) { goal_reached = true; - Fiber::YieldTo(fiber1.get(), thread_fiber.get()); + Fiber::YieldTo(fiber1, thread_fiber); } rewinded = true; fiber1->Rewind(); |