Make the TaskManager a automatic livetime object

This way the destructor can be used for cleanup.
This commit is contained in:
phosit
2024-09-18 18:40:21 +02:00
committed by phosit
parent 256152df6d
commit 31d9b0ed05
8 changed files with 44 additions and 72 deletions
+9 -30
View File
@@ -1,4 +1,4 @@
/* Copyright (C) 2022 Wildfire Games.
/* Copyright (C) 2024 Wildfire Games.
* This file is part of 0 A.D.
*
* 0 A.D. is free software: you can redistribute it and/or modify
@@ -57,8 +57,6 @@ size_t GetDefaultNumberOfWorkers()
} // anonymous namespace
std::unique_ptr<TaskManager> g_TaskManager;
class Thread;
using QueueItem = std::function<void()>;
@@ -127,8 +125,14 @@ public:
Impl() = default;
~Impl()
{
ClearQueue();
m_Workers.clear();
{
std::lock_guard<std::mutex> lock(m_GlobalMutex);
ENSURE(m_GlobalQueue.empty());
}
{
std::lock_guard<std::mutex> lock(m_GlobalLowPriorityMutex);
ENSURE(m_GlobalLowPriorityQueue.empty());
}
}
/**
@@ -179,19 +183,6 @@ void TaskManager::Impl::SetupWorkers(size_t numberOfWorkers)
m_Workers.emplace_back(*this);
}
void TaskManager::ClearQueue() { m->ClearQueue(); }
void TaskManager::Impl::ClearQueue()
{
{
std::lock_guard<std::mutex> lock(m_GlobalMutex);
m_GlobalQueue.clear();
}
{
std::lock_guard<std::mutex> lock(m_GlobalLowPriorityMutex);
m_GlobalLowPriorityQueue.clear();
}
}
size_t TaskManager::GetNumberOfWorkers() const
{
return m->m_Workers.size();
@@ -236,18 +227,6 @@ bool TaskManager::Impl::PopTask(std::function<void()>& taskOut)
return false;
}
void TaskManager::Initialise()
{
if (!g_TaskManager)
g_TaskManager = std::make_unique<TaskManager>();
}
TaskManager& TaskManager::Instance()
{
ENSURE(g_TaskManager);
return *g_TaskManager;
}
// Thread definition
WorkerThread::WorkerThread(TaskManager::Impl& taskManager)