LibThreading: Remove the thread pool

The thread pool test is currently flakey and takes over 2 minutes to run
on CI. It also currently has no users now that RequestServer uses curl,
so let's just remove it for now. If we need it in the future, we can
revive it from git history.
This commit is contained in:
Timothy Flynn
2024-09-22 13:41:31 -04:00
committed by Tim Flynn
parent 93ec010bee
commit 8472b2b1fb
3 changed files with 0 additions and 212 deletions

View File

@@ -1,6 +1,5 @@
set(TEST_SOURCES
TestThread.cpp
TestThreadPool.cpp
)
foreach(source IN LISTS TEST_SOURCES)

View File

@@ -1,57 +0,0 @@
/*
* Copyright (c) 2024, Braydn Moore <braydn.moore@uwaterloo.ca>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#include <AK/Time.h>
#include <LibCore/ElapsedTimer.h>
#include <LibTest/TestCase.h>
#include <LibThreading/ThreadPool.h>
using namespace AK::TimeLiterals;
TEST_CASE(thread_pool_deadlock)
{
static constexpr auto RUN_TIMEOUT = 120_sec;
static constexpr u64 NUM_RUNS = 1000;
static constexpr u64 MAX_VALUE = 1 << 15;
for (u64 i = 0; i < NUM_RUNS; ++i) {
u64 expected_value = (MAX_VALUE * (MAX_VALUE + 1)) / 2;
Atomic<u64> sum;
// heap allocate the ThreadPool in case it deadlocks. Exiting in the
// case of a deadlock will purposefully leak memory to avoid calling the
// destructor and hanging the test
auto* thread_pool = new Threading::ThreadPool<u64>(
[&sum](u64 current_val) {
sum += current_val;
});
for (u64 j = 0; j <= MAX_VALUE; ++j) {
thread_pool->submit(j);
}
auto join_thread = Threading::Thread::construct([thread_pool]() -> intptr_t {
thread_pool->wait_for_all();
delete thread_pool;
return 0;
});
join_thread->start();
auto timer = Core::ElapsedTimer::start_new(Core::TimerType::Precise);
while (!join_thread->has_exited() && timer.elapsed_milliseconds() < RUN_TIMEOUT.to_milliseconds())
;
EXPECT(join_thread->has_exited());
// exit since the current pool is deadlocked and we have no way of
// unblocking the pool other than having the OS teardown the process
// struct
if (!join_thread->has_exited()) {
return;
}
(void)join_thread->join();
EXPECT_EQ(sum.load(), expected_value);
}
}