summaryrefslogtreecommitdiff
path: root/src/core/hle/kernel/kernel.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/hle/kernel/kernel.cpp')
-rw-r--r--src/core/hle/kernel/kernel.cpp18
1 files changed, 4 insertions, 14 deletions
diff --git a/src/core/hle/kernel/kernel.cpp b/src/core/hle/kernel/kernel.cpp
index 0ffb78d51..2ceeaeb5f 100644
--- a/src/core/hle/kernel/kernel.cpp
+++ b/src/core/hle/kernel/kernel.cpp
@@ -63,8 +63,6 @@ struct KernelCore::Impl {
63 global_scheduler_context = std::make_unique<Kernel::GlobalSchedulerContext>(kernel); 63 global_scheduler_context = std::make_unique<Kernel::GlobalSchedulerContext>(kernel);
64 global_handle_table = std::make_unique<Kernel::KHandleTable>(kernel); 64 global_handle_table = std::make_unique<Kernel::KHandleTable>(kernel);
65 65
66 service_thread_manager =
67 std::make_unique<Common::ThreadWorker>(1, "yuzu:ServiceThreadManager");
68 is_phantom_mode_for_singlecore = false; 66 is_phantom_mode_for_singlecore = false;
69 67
70 InitializePhysicalCores(); 68 InitializePhysicalCores();
@@ -96,7 +94,6 @@ struct KernelCore::Impl {
96 process_list.clear(); 94 process_list.clear();
97 95
98 // Ensures all service threads gracefully shutdown 96 // Ensures all service threads gracefully shutdown
99 service_thread_manager.reset();
100 service_threads.clear(); 97 service_threads.clear();
101 98
102 next_object_id = 0; 99 next_object_id = 0;
@@ -680,10 +677,6 @@ struct KernelCore::Impl {
680 // Threads used for services 677 // Threads used for services
681 std::unordered_set<std::shared_ptr<Kernel::ServiceThread>> service_threads; 678 std::unordered_set<std::shared_ptr<Kernel::ServiceThread>> service_threads;
682 679
683 // Service threads are managed by a worker thread, so that a calling service thread can queue up
684 // the release of itself
685 std::unique_ptr<Common::ThreadWorker> service_thread_manager;
686
687 std::array<KThread*, Core::Hardware::NUM_CPU_CORES> suspend_threads; 680 std::array<KThread*, Core::Hardware::NUM_CPU_CORES> suspend_threads;
688 std::array<Core::CPUInterruptHandler, Core::Hardware::NUM_CPU_CORES> interrupts{}; 681 std::array<Core::CPUInterruptHandler, Core::Hardware::NUM_CPU_CORES> interrupts{};
689 std::array<std::unique_ptr<Kernel::KScheduler>, Core::Hardware::NUM_CPU_CORES> schedulers{}; 682 std::array<std::unique_ptr<Kernel::KScheduler>, Core::Hardware::NUM_CPU_CORES> schedulers{};
@@ -986,17 +979,14 @@ void KernelCore::ExitSVCProfile() {
986 979
987std::weak_ptr<Kernel::ServiceThread> KernelCore::CreateServiceThread(const std::string& name) { 980std::weak_ptr<Kernel::ServiceThread> KernelCore::CreateServiceThread(const std::string& name) {
988 auto service_thread = std::make_shared<Kernel::ServiceThread>(*this, 1, name); 981 auto service_thread = std::make_shared<Kernel::ServiceThread>(*this, 1, name);
989 impl->service_thread_manager->QueueWork( 982 impl->service_threads.emplace(service_thread);
990 [this, service_thread] { impl->service_threads.emplace(service_thread); });
991 return service_thread; 983 return service_thread;
992} 984}
993 985
994void KernelCore::ReleaseServiceThread(std::weak_ptr<Kernel::ServiceThread> service_thread) { 986void KernelCore::ReleaseServiceThread(std::weak_ptr<Kernel::ServiceThread> service_thread) {
995 impl->service_thread_manager->QueueWork([this, service_thread] { 987 if (auto strong_ptr = service_thread.lock()) {
996 if (auto strong_ptr = service_thread.lock()) { 988 impl->service_threads.erase(strong_ptr);
997 impl->service_threads.erase(strong_ptr); 989 }
998 }
999 });
1000} 990}
1001 991
1002Init::KSlabResourceCounts& KernelCore::SlabResourceCounts() { 992Init::KSlabResourceCounts& KernelCore::SlabResourceCounts() {