diff options
| author | 2021-09-28 23:42:50 -0400 | |
|---|---|---|
| committer | 2021-10-01 23:38:59 -0400 | |
| commit | fadcee14f8fca1b76b4ea48b1cfd136ccae8d182 (patch) | |
| tree | a5787938bc73ff1b0b539e0945d3544d06a7d6d2 /src/core/hle/service/nifm | |
| parent | Merge pull request #7102 from Morph1984/remove-boxcat (diff) | |
| download | yuzu-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.cpp | 32 |
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 | |||
| 14 | namespace { | ||
| 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: | |||
| 129 | class IRequest final : public ServiceFramework<IRequest> { | 140 | class IRequest final : public ServiceFramework<IRequest> { |
| 130 | public: | 141 | public: |
| 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 | ||
| 169 | private: | 182 | private: |
| @@ -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 | ||
| 236 | class INetworkProfile final : public ServiceFramework<INetworkProfile> { | 252 | class INetworkProfile final : public ServiceFramework<INetworkProfile> { |