diff options
Diffstat (limited to 'src/core/hle/service/kernel_helpers.cpp')
| -rw-r--r-- | src/core/hle/service/kernel_helpers.cpp | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/src/core/hle/service/kernel_helpers.cpp b/src/core/hle/service/kernel_helpers.cpp index f7a5cb7049..e4d6925f19 100644 --- a/src/core/hle/service/kernel_helpers.cpp +++ b/src/core/hle/service/kernel_helpers.cpp @@ -4,6 +4,9 @@ // SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later +#include <mutex> +#include <unordered_map> + #include "core/core.h" #include "core/core_timing.h" #include "core/hle/kernel/k_event.h" @@ -16,6 +19,12 @@ namespace Service::KernelHelpers { +namespace { +// Event names for the debugger's handle listing. +std::mutex event_names_mutex; +std::unordered_map<const Kernel::KEvent*, std::string> event_names; +} // namespace + ServiceContext::ServiceContext(Core::System& system_, std::string name_) : kernel(system_.Kernel()) { @@ -64,14 +73,28 @@ Kernel::KEvent* ServiceContext::CreateEvent(std::string&& name) { // Register the event. Kernel::KEvent::Register(kernel, event); + { + std::scoped_lock lk{event_names_mutex}; + event_names[event] = std::move(name); + } return event; } void ServiceContext::CloseEvent(Kernel::KEvent* event) { if (event) { + { + std::scoped_lock lk{event_names_mutex}; + event_names.erase(event); + } event->GetReadableEvent().Close(kernel); event->Close(kernel); } } +std::string ServiceContext::GetEventName(const Kernel::KEvent* event) { + std::scoped_lock lk{event_names_mutex}; + const auto it = event_names.find(event); + return it == event_names.end() ? std::string{} : it->second; +} + } // namespace Service::KernelHelpers |
