diff options
| author | 2022-10-23 05:45:45 -0400 | |
|---|---|---|
| committer | 2022-10-23 05:45:45 -0400 | |
| commit | 2d90a927c9f7652aa7e259ba57fa22ddbf8bed24 (patch) | |
| tree | 031c7e8278dfea30bbbecd8a971ee4c2fc31feee /src/core/hle/kernel/kernel.cpp | |
| parent | Merge pull request #9095 from FernandoS27/meat-good-vegetable-bad (diff) | |
| download | yuzu-2d90a927c9f7652aa7e259ba57fa22ddbf8bed24.tar.gz yuzu-2d90a927c9f7652aa7e259ba57fa22ddbf8bed24.tar.xz yuzu-2d90a927c9f7652aa7e259ba57fa22ddbf8bed24.zip | |
core: barrier service thread shutdown
Diffstat (limited to 'src/core/hle/kernel/kernel.cpp')
| -rw-r--r-- | src/core/hle/kernel/kernel.cpp | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/src/core/hle/kernel/kernel.cpp b/src/core/hle/kernel/kernel.cpp index eed2dc9f3..fdc774e30 100644 --- a/src/core/hle/kernel/kernel.cpp +++ b/src/core/hle/kernel/kernel.cpp | |||
| @@ -48,8 +48,8 @@ namespace Kernel { | |||
| 48 | 48 | ||
| 49 | struct KernelCore::Impl { | 49 | struct KernelCore::Impl { |
| 50 | explicit Impl(Core::System& system_, KernelCore& kernel_) | 50 | explicit Impl(Core::System& system_, KernelCore& kernel_) |
| 51 | : time_manager{system_}, | 51 | : time_manager{system_}, service_threads_manager{1, "ServiceThreadsManager"}, |
| 52 | service_threads_manager{1, "ServiceThreadsManager"}, system{system_} {} | 52 | service_thread_barrier{2}, system{system_} {} |
| 53 | 53 | ||
| 54 | void SetMulticore(bool is_multi) { | 54 | void SetMulticore(bool is_multi) { |
| 55 | is_multicore = is_multi; | 55 | is_multicore = is_multi; |
| @@ -737,7 +737,12 @@ struct KernelCore::Impl { | |||
| 737 | } | 737 | } |
| 738 | 738 | ||
| 739 | void ClearServiceThreads() { | 739 | void ClearServiceThreads() { |
| 740 | service_threads_manager.QueueWork([this]() { service_threads.clear(); }); | 740 | service_threads_manager.QueueWork([this] { |
| 741 | service_threads.clear(); | ||
| 742 | default_service_thread.reset(); | ||
| 743 | service_thread_barrier.Sync(); | ||
| 744 | }); | ||
| 745 | service_thread_barrier.Sync(); | ||
| 741 | } | 746 | } |
| 742 | 747 | ||
| 743 | std::mutex server_objects_lock; | 748 | std::mutex server_objects_lock; |
| @@ -802,6 +807,7 @@ struct KernelCore::Impl { | |||
| 802 | std::unordered_set<std::shared_ptr<ServiceThread>> service_threads; | 807 | std::unordered_set<std::shared_ptr<ServiceThread>> service_threads; |
| 803 | std::weak_ptr<ServiceThread> default_service_thread; | 808 | std::weak_ptr<ServiceThread> default_service_thread; |
| 804 | Common::ThreadWorker service_threads_manager; | 809 | Common::ThreadWorker service_threads_manager; |
| 810 | Common::Barrier service_thread_barrier; | ||
| 805 | 811 | ||
| 806 | std::array<KThread*, Core::Hardware::NUM_CPU_CORES> shutdown_threads; | 812 | std::array<KThread*, Core::Hardware::NUM_CPU_CORES> shutdown_threads; |
| 807 | std::array<std::unique_ptr<Kernel::KScheduler>, Core::Hardware::NUM_CPU_CORES> schedulers{}; | 813 | std::array<std::unique_ptr<Kernel::KScheduler>, Core::Hardware::NUM_CPU_CORES> schedulers{}; |