summaryrefslogtreecommitdiffstats
path: root/src/tests/common/fibers.cpp
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/tests/common/fibers.cpp39
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();