From fadcee14f8fca1b76b4ea48b1cfd136ccae8d182 Mon Sep 17 00:00:00 2001 From: Morph <39850852+Morph1984@users.noreply.github.com> Date: Tue, 28 Sep 2021 23:42:50 -0400 Subject: service: Replace service event creation with ServiceContext::CreateEvent The service context helps to manage all created events and allows us to close them upon destruction. --- src/core/hle/service/am/applets/applets.cpp | 41 ++++++++++++++--------------- src/core/hle/service/am/applets/applets.h | 10 ++++--- 2 files changed, 26 insertions(+), 25 deletions(-) (limited to 'src/core/hle/service/am/applets') diff --git a/src/core/hle/service/am/applets/applets.cpp b/src/core/hle/service/am/applets/applets.cpp index 2b7685d42..7320b1c0f 100644 --- a/src/core/hle/service/am/applets/applets.cpp +++ b/src/core/hle/service/am/applets/applets.cpp @@ -12,8 +12,7 @@ #include "core/frontend/applets/profile_select.h" #include "core/frontend/applets/software_keyboard.h" #include "core/frontend/applets/web_browser.h" -#include "core/hle/kernel/k_readable_event.h" -#include "core/hle/kernel/k_writable_event.h" +#include "core/hle/kernel/k_event.h" #include "core/hle/service/am/am.h" #include "core/hle/service/am/applet_ae.h" #include "core/hle/service/am/applet_oe.h" @@ -29,19 +28,19 @@ namespace Service::AM::Applets { AppletDataBroker::AppletDataBroker(Core::System& system_, LibraryAppletMode applet_mode_) - : system{system_}, applet_mode{applet_mode_}, state_changed_event{system.Kernel()}, - pop_out_data_event{system.Kernel()}, pop_interactive_out_data_event{system.Kernel()} { - - Kernel::KAutoObject::Create(std::addressof(state_changed_event)); - Kernel::KAutoObject::Create(std::addressof(pop_out_data_event)); - Kernel::KAutoObject::Create(std::addressof(pop_interactive_out_data_event)); - - state_changed_event.Initialize("ILibraryAppletAccessor:StateChangedEvent"); - pop_out_data_event.Initialize("ILibraryAppletAccessor:PopDataOutEvent"); - pop_interactive_out_data_event.Initialize("ILibraryAppletAccessor:PopInteractiveDataOutEvent"); + : system{system_}, applet_mode{applet_mode_}, service_context{system, + "ILibraryAppletAccessor"} { + state_changed_event = service_context.CreateEvent("ILibraryAppletAccessor:StateChangedEvent"); + pop_out_data_event = service_context.CreateEvent("ILibraryAppletAccessor:PopDataOutEvent"); + pop_interactive_out_data_event = + service_context.CreateEvent("ILibraryAppletAccessor:PopInteractiveDataOutEvent"); } -AppletDataBroker::~AppletDataBroker() = default; +AppletDataBroker::~AppletDataBroker() { + service_context.CloseEvent(state_changed_event); + service_context.CloseEvent(pop_out_data_event); + service_context.CloseEvent(pop_interactive_out_data_event); +} AppletDataBroker::RawChannelData AppletDataBroker::PeekDataToAppletForDebug() const { std::vector> out_normal; @@ -65,7 +64,7 @@ std::shared_ptr AppletDataBroker::PopNormalDataToGame() { auto out = std::move(out_channel.front()); out_channel.pop_front(); - pop_out_data_event.GetWritableEvent().Clear(); + pop_out_data_event->GetWritableEvent().Clear(); return out; } @@ -84,7 +83,7 @@ std::shared_ptr AppletDataBroker::PopInteractiveDataToGame() { auto out = std::move(out_interactive_channel.front()); out_interactive_channel.pop_front(); - pop_interactive_out_data_event.GetWritableEvent().Clear(); + pop_interactive_out_data_event->GetWritableEvent().Clear(); return out; } @@ -103,7 +102,7 @@ void AppletDataBroker::PushNormalDataFromGame(std::shared_ptr&& storag void AppletDataBroker::PushNormalDataFromApplet(std::shared_ptr&& storage) { out_channel.emplace_back(std::move(storage)); - pop_out_data_event.GetWritableEvent().Signal(); + pop_out_data_event->GetWritableEvent().Signal(); } void AppletDataBroker::PushInteractiveDataFromGame(std::shared_ptr&& storage) { @@ -112,11 +111,11 @@ void AppletDataBroker::PushInteractiveDataFromGame(std::shared_ptr&& s void AppletDataBroker::PushInteractiveDataFromApplet(std::shared_ptr&& storage) { out_interactive_channel.emplace_back(std::move(storage)); - pop_interactive_out_data_event.GetWritableEvent().Signal(); + pop_interactive_out_data_event->GetWritableEvent().Signal(); } void AppletDataBroker::SignalStateChanged() { - state_changed_event.GetWritableEvent().Signal(); + state_changed_event->GetWritableEvent().Signal(); switch (applet_mode) { case LibraryAppletMode::AllForeground: @@ -141,15 +140,15 @@ void AppletDataBroker::SignalStateChanged() { } Kernel::KReadableEvent& AppletDataBroker::GetNormalDataEvent() { - return pop_out_data_event.GetReadableEvent(); + return pop_out_data_event->GetReadableEvent(); } Kernel::KReadableEvent& AppletDataBroker::GetInteractiveDataEvent() { - return pop_interactive_out_data_event.GetReadableEvent(); + return pop_interactive_out_data_event->GetReadableEvent(); } Kernel::KReadableEvent& AppletDataBroker::GetStateChangedEvent() { - return state_changed_event.GetReadableEvent(); + return state_changed_event->GetReadableEvent(); } Applet::Applet(Core::System& system_, LibraryAppletMode applet_mode_) diff --git a/src/core/hle/service/am/applets/applets.h b/src/core/hle/service/am/applets/applets.h index 5c0b4b459..15eeb4ee1 100644 --- a/src/core/hle/service/am/applets/applets.h +++ b/src/core/hle/service/am/applets/applets.h @@ -8,7 +8,7 @@ #include #include "common/swap.h" -#include "core/hle/kernel/k_event.h" +#include "core/hle/service/kernel_helpers.h" union ResultCode; @@ -105,6 +105,8 @@ private: Core::System& system; LibraryAppletMode applet_mode; + KernelHelpers::ServiceContext service_context; + // Queues are named from applet's perspective // PopNormalDataToApplet and PushNormalDataFromGame @@ -119,13 +121,13 @@ private: // PopInteractiveDataToGame and PushInteractiveDataFromApplet std::deque> out_interactive_channel; - Kernel::KEvent state_changed_event; + Kernel::KEvent* state_changed_event; // Signaled on PushNormalDataFromApplet - Kernel::KEvent pop_out_data_event; + Kernel::KEvent* pop_out_data_event; // Signaled on PushInteractiveDataFromApplet - Kernel::KEvent pop_interactive_out_data_event; + Kernel::KEvent* pop_interactive_out_data_event; }; class Applet { -- cgit v1.2.3