summaryrefslogtreecommitdiff
path: root/src/core/hle/service/nifm
diff options
context:
space:
mode:
authorGravatar Morph2021-09-28 23:42:50 -0400
committerGravatar Morph2021-10-01 23:38:59 -0400
commitfadcee14f8fca1b76b4ea48b1cfd136ccae8d182 (patch)
treea5787938bc73ff1b0b539e0945d3544d06a7d6d2 /src/core/hle/service/nifm
parentMerge pull request #7102 from Morph1984/remove-boxcat (diff)
downloadyuzu-fadcee14f8fca1b76b4ea48b1cfd136ccae8d182.tar.gz
yuzu-fadcee14f8fca1b76b4ea48b1cfd136ccae8d182.tar.xz
yuzu-fadcee14f8fca1b76b4ea48b1cfd136ccae8d182.zip
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.
Diffstat (limited to 'src/core/hle/service/nifm')
-rw-r--r--src/core/hle/service/nifm/nifm.cpp32
1 files changed, 24 insertions, 8 deletions
diff --git a/src/core/hle/service/nifm/nifm.cpp b/src/core/hle/service/nifm/nifm.cpp
index 9decb9290..f13dc8b0d 100644
--- a/src/core/hle/service/nifm/nifm.cpp
+++ b/src/core/hle/service/nifm/nifm.cpp
@@ -6,10 +6,21 @@
6#include "core/core.h" 6#include "core/core.h"
7#include "core/hle/ipc_helpers.h" 7#include "core/hle/ipc_helpers.h"
8#include "core/hle/kernel/k_event.h" 8#include "core/hle/kernel/k_event.h"
9#include "core/hle/kernel/k_readable_event.h"
10#include "core/hle/kernel/kernel.h" 9#include "core/hle/kernel/kernel.h"
10#include "core/hle/service/kernel_helpers.h"
11#include "core/hle/service/nifm/nifm.h" 11#include "core/hle/service/nifm/nifm.h"
12#include "core/hle/service/service.h" 12#include "core/hle/service/service.h"
13
14namespace {
15
16// Avoids name conflict with Windows' CreateEvent macro.
17[[nodiscard]] Kernel::KEvent* CreateKEvent(Service::KernelHelpers::ServiceContext& service_context,
18 std::string&& name) {
19 return service_context.CreateEvent(std::move(name));
20}
21
22} // Anonymous namespace
23
13#include "core/network/network.h" 24#include "core/network/network.h"
14#include "core/network/network_interface.h" 25#include "core/network/network_interface.h"
15 26
@@ -129,7 +140,7 @@ public:
129class IRequest final : public ServiceFramework<IRequest> { 140class IRequest final : public ServiceFramework<IRequest> {
130public: 141public:
131 explicit IRequest(Core::System& system_) 142 explicit IRequest(Core::System& system_)
132 : ServiceFramework{system_, "IRequest"}, event1{system.Kernel()}, event2{system.Kernel()} { 143 : ServiceFramework{system_, "IRequest"}, service_context{system_, "IRequest"} {
133 static const FunctionInfo functions[] = { 144 static const FunctionInfo functions[] = {
134 {0, &IRequest::GetRequestState, "GetRequestState"}, 145 {0, &IRequest::GetRequestState, "GetRequestState"},
135 {1, &IRequest::GetResult, "GetResult"}, 146 {1, &IRequest::GetResult, "GetResult"},
@@ -159,11 +170,13 @@ public:
159 }; 170 };
160 RegisterHandlers(functions); 171 RegisterHandlers(functions);
161 172
162 Kernel::KAutoObject::Create(std::addressof(event1)); 173 event1 = CreateKEvent(service_context, "IRequest:Event1");
163 Kernel::KAutoObject::Create(std::addressof(event2)); 174 event2 = CreateKEvent(service_context, "IRequest:Event2");
175 }
164 176
165 event1.Initialize("IRequest:Event1"); 177 ~IRequest() override {
166 event2.Initialize("IRequest:Event2"); 178 service_context.CloseEvent(event1);
179 service_context.CloseEvent(event2);
167 } 180 }
168 181
169private: 182private:
@@ -199,7 +212,7 @@ private:
199 212
200 IPC::ResponseBuilder rb{ctx, 2, 2}; 213 IPC::ResponseBuilder rb{ctx, 2, 2};
201 rb.Push(ResultSuccess); 214 rb.Push(ResultSuccess);
202 rb.PushCopyObjects(event1.GetReadableEvent(), event2.GetReadableEvent()); 215 rb.PushCopyObjects(event1->GetReadableEvent(), event2->GetReadableEvent());
203 } 216 }
204 217
205 void Cancel(Kernel::HLERequestContext& ctx) { 218 void Cancel(Kernel::HLERequestContext& ctx) {
@@ -230,7 +243,10 @@ private:
230 rb.Push<u32>(0); 243 rb.Push<u32>(0);
231 } 244 }
232 245
233 Kernel::KEvent event1, event2; 246 KernelHelpers::ServiceContext service_context;
247
248 Kernel::KEvent* event1;
249 Kernel::KEvent* event2;
234}; 250};
235 251
236class INetworkProfile final : public ServiceFramework<INetworkProfile> { 252class INetworkProfile final : public ServiceFramework<INetworkProfile> {