aboutsummaryrefslogtreecommitdiff
path: root/src/core/hle/service/kernel_helpers.cpp
diff options
context:
space:
mode:
authorTakoroka <137927095+Takoroka@users.noreply.github.com>2026-10-30 12:29:33 -0400
committerTakoroka <137927095+Takoroka@users.noreply.github.com>2026-10-30 12:29:40 -0400
commit36d9276b1ae582b2a941659b35ad684d0907a189 (patch)
treed203d505c4f2d8731debcbff17e084535385af4c /src/core/hle/service/kernel_helpers.cpp
parentf362528c0447c491bfe00c0bdd5d8c245396a24c (diff)
svc: name the handles a traced WaitSynchronization waits on
With EDEN_NX2_SVC_TRACE, WaitSynchronization now logs its handles and, for events services created, the names they gave them (a title that never draws usually polls one: Minecraft waits on AM's message event).
Diffstat (limited to 'src/core/hle/service/kernel_helpers.cpp')
-rw-r--r--src/core/hle/service/kernel_helpers.cpp19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/core/hle/service/kernel_helpers.cpp b/src/core/hle/service/kernel_helpers.cpp
index e4d6925f19..db55c6f81a 100644
--- a/src/core/hle/service/kernel_helpers.cpp
+++ b/src/core/hle/service/kernel_helpers.cpp
@@ -48,6 +48,17 @@ ServiceContext::~ServiceContext() {
}
}
+namespace {
+std::mutex debug_names_mutex;
+std::unordered_map<const Kernel::KReadableEvent*, std::string> debug_names;
+} // Anonymous namespace
+
+std::string DebugEventName(const Kernel::KReadableEvent* event) {
+ std::scoped_lock lk{debug_names_mutex};
+ const auto it = debug_names.find(event);
+ return it != debug_names.end() ? it->second : std::string{"?"};
+}
+
Kernel::KEvent* ServiceContext::CreateEvent(std::string&& name) {
// Reserve a new event from the process resource limit
Kernel::KScopedResourceReservation event_reservation(kernel, process,
@@ -74,6 +85,10 @@ Kernel::KEvent* ServiceContext::CreateEvent(std::string&& name) {
Kernel::KEvent::Register(kernel, event);
{
+ std::scoped_lock lk{debug_names_mutex};
+ debug_names[&event->GetReadableEvent()] = name;
+ }
+ {
std::scoped_lock lk{event_names_mutex};
event_names[event] = std::move(name);
}
@@ -86,6 +101,10 @@ void ServiceContext::CloseEvent(Kernel::KEvent* event) {
std::scoped_lock lk{event_names_mutex};
event_names.erase(event);
}
+ {
+ std::scoped_lock lk{debug_names_mutex};
+ debug_names.erase(&event->GetReadableEvent());
+ }
event->GetReadableEvent().Close(kernel);
event->Close(kernel);
}