diff options
| author | 2021-04-03 21:21:22 -0700 | |
|---|---|---|
| committer | 2021-05-05 16:40:50 -0700 | |
| commit | 5e5933256b022f6890fc3f14164ae9e9c3ee9ae3 (patch) | |
| tree | f65bdacde0afe5465446f90e26f2da1b8126cda9 /src/core | |
| parent | hle: kernel: Migrate more of KThread to KAutoObject. (diff) | |
| download | yuzu-5e5933256b022f6890fc3f14164ae9e9c3ee9ae3.tar.gz yuzu-5e5933256b022f6890fc3f14164ae9e9c3ee9ae3.tar.xz yuzu-5e5933256b022f6890fc3f14164ae9e9c3ee9ae3.zip | |
hle: kernel: Refactor IPC interfaces to not use std::shared_ptr.
Diffstat (limited to 'src/core')
28 files changed, 65 insertions, 59 deletions
diff --git a/src/core/hle/ipc_helpers.h b/src/core/hle/ipc_helpers.h index 56cc911d1..224bee950 100644 --- a/src/core/hle/ipc_helpers.h +++ b/src/core/hle/ipc_helpers.h | |||
| @@ -138,8 +138,8 @@ public: | |||
| 138 | context->AddDomainObject(std::move(iface)); | 138 | context->AddDomainObject(std::move(iface)); |
| 139 | } else { | 139 | } else { |
| 140 | auto [client, server] = Kernel::Session::Create(kernel, iface->GetServiceName()); | 140 | auto [client, server] = Kernel::Session::Create(kernel, iface->GetServiceName()); |
| 141 | context->AddMoveObject(std::move(client)); | 141 | context->AddMoveObject(client.get()); |
| 142 | iface->ClientConnected(std::move(server)); | 142 | iface->ClientConnected(std::move(client), std::move(server)); |
| 143 | } | 143 | } |
| 144 | } | 144 | } |
| 145 | 145 | ||
| @@ -215,10 +215,10 @@ public: | |||
| 215 | void PushRaw(const T& value); | 215 | void PushRaw(const T& value); |
| 216 | 216 | ||
| 217 | template <typename... O> | 217 | template <typename... O> |
| 218 | void PushMoveObjects(std::shared_ptr<O>... pointers); | 218 | void PushMoveObjects(O*... pointers); |
| 219 | 219 | ||
| 220 | template <typename... O> | 220 | template <typename... O> |
| 221 | void PushCopyObjects(std::shared_ptr<O>... pointers); | 221 | void PushCopyObjects(O*... pointers); |
| 222 | 222 | ||
| 223 | private: | 223 | private: |
| 224 | u32 normal_params_size{}; | 224 | u32 normal_params_size{}; |
| @@ -301,7 +301,7 @@ void ResponseBuilder::Push(const First& first_value, const Other&... other_value | |||
| 301 | } | 301 | } |
| 302 | 302 | ||
| 303 | template <typename... O> | 303 | template <typename... O> |
| 304 | inline void ResponseBuilder::PushCopyObjects(std::shared_ptr<O>... pointers) { | 304 | inline void ResponseBuilder::PushCopyObjects(O*... pointers) { |
| 305 | auto objects = {pointers...}; | 305 | auto objects = {pointers...}; |
| 306 | for (auto& object : objects) { | 306 | for (auto& object : objects) { |
| 307 | context->AddCopyObject(std::move(object)); | 307 | context->AddCopyObject(std::move(object)); |
| @@ -309,7 +309,7 @@ inline void ResponseBuilder::PushCopyObjects(std::shared_ptr<O>... pointers) { | |||
| 309 | } | 309 | } |
| 310 | 310 | ||
| 311 | template <typename... O> | 311 | template <typename... O> |
| 312 | inline void ResponseBuilder::PushMoveObjects(std::shared_ptr<O>... pointers) { | 312 | inline void ResponseBuilder::PushMoveObjects(O*... pointers) { |
| 313 | auto objects = {pointers...}; | 313 | auto objects = {pointers...}; |
| 314 | for (auto& object : objects) { | 314 | for (auto& object : objects) { |
| 315 | context->AddMoveObject(std::move(object)); | 315 | context->AddMoveObject(std::move(object)); |
| @@ -360,10 +360,10 @@ public: | |||
| 360 | T PopRaw(); | 360 | T PopRaw(); |
| 361 | 361 | ||
| 362 | template <typename T> | 362 | template <typename T> |
| 363 | std::shared_ptr<T> GetMoveObject(std::size_t index); | 363 | T* GetMoveObject(std::size_t index); |
| 364 | 364 | ||
| 365 | template <typename T> | 365 | template <typename T> |
| 366 | std::shared_ptr<T> GetCopyObject(std::size_t index); | 366 | T* GetCopyObject(std::size_t index); |
| 367 | 367 | ||
| 368 | template <class T> | 368 | template <class T> |
| 369 | std::shared_ptr<T> PopIpcInterface() { | 369 | std::shared_ptr<T> PopIpcInterface() { |
| @@ -470,12 +470,12 @@ void RequestParser::Pop(First& first_value, Other&... other_values) { | |||
| 470 | } | 470 | } |
| 471 | 471 | ||
| 472 | template <typename T> | 472 | template <typename T> |
| 473 | std::shared_ptr<T> RequestParser::GetMoveObject(std::size_t index) { | 473 | T* RequestParser::GetMoveObject(std::size_t index) { |
| 474 | return context->GetMoveObject<T>(index); | 474 | return context->GetMoveObject<T>(index); |
| 475 | } | 475 | } |
| 476 | 476 | ||
| 477 | template <typename T> | 477 | template <typename T> |
| 478 | std::shared_ptr<T> RequestParser::GetCopyObject(std::size_t index) { | 478 | T* RequestParser::GetCopyObject(std::size_t index) { |
| 479 | return context->GetCopyObject<T>(index); | 479 | return context->GetCopyObject<T>(index); |
| 480 | } | 480 | } |
| 481 | 481 | ||
diff --git a/src/core/hle/kernel/client_port.cpp b/src/core/hle/kernel/client_port.cpp index 0b6957e31..431a90d82 100644 --- a/src/core/hle/kernel/client_port.cpp +++ b/src/core/hle/kernel/client_port.cpp | |||
| @@ -28,7 +28,7 @@ ResultVal<std::shared_ptr<ClientSession>> ClientPort::Connect() { | |||
| 28 | auto [client, server] = Kernel::Session::Create(kernel, name); | 28 | auto [client, server] = Kernel::Session::Create(kernel, name); |
| 29 | 29 | ||
| 30 | if (server_port->HasHLEHandler()) { | 30 | if (server_port->HasHLEHandler()) { |
| 31 | server_port->GetHLEHandler()->ClientConnected(std::move(server)); | 31 | server_port->GetHLEHandler()->ClientConnected(client, std::move(server)); |
| 32 | } else { | 32 | } else { |
| 33 | server_port->AppendPendingSession(std::move(server)); | 33 | server_port->AppendPendingSession(std::move(server)); |
| 34 | } | 34 | } |
diff --git a/src/core/hle/kernel/hle_ipc.cpp b/src/core/hle/kernel/hle_ipc.cpp index 6ffe6ac41..a9702539f 100644 --- a/src/core/hle/kernel/hle_ipc.cpp +++ b/src/core/hle/kernel/hle_ipc.cpp | |||
| @@ -35,15 +35,17 @@ SessionRequestHandler::SessionRequestHandler() = default; | |||
| 35 | 35 | ||
| 36 | SessionRequestHandler::~SessionRequestHandler() = default; | 36 | SessionRequestHandler::~SessionRequestHandler() = default; |
| 37 | 37 | ||
| 38 | void SessionRequestHandler::ClientConnected(std::shared_ptr<ServerSession> server_session) { | 38 | void SessionRequestHandler::ClientConnected(std::shared_ptr<ClientSession> client_session, |
| 39 | std::shared_ptr<ServerSession> server_session) { | ||
| 39 | server_session->SetHleHandler(shared_from_this()); | 40 | server_session->SetHleHandler(shared_from_this()); |
| 40 | connected_sessions.push_back(std::move(server_session)); | 41 | client_sessions.push_back(std::move(client_session)); |
| 42 | server_sessions.push_back(std::move(server_session)); | ||
| 41 | } | 43 | } |
| 42 | 44 | ||
| 43 | void SessionRequestHandler::ClientDisconnected( | 45 | void SessionRequestHandler::ClientDisconnected( |
| 44 | const std::shared_ptr<ServerSession>& server_session) { | 46 | const std::shared_ptr<ServerSession>& server_session) { |
| 45 | server_session->SetHleHandler(nullptr); | 47 | server_session->SetHleHandler(nullptr); |
| 46 | boost::range::remove_erase(connected_sessions, server_session); | 48 | boost::range::remove_erase(server_sessions, server_session); |
| 47 | } | 49 | } |
| 48 | 50 | ||
| 49 | HLERequestContext::HLERequestContext(KernelCore& kernel_, Core::Memory::Memory& memory_, | 51 | HLERequestContext::HLERequestContext(KernelCore& kernel_, Core::Memory::Memory& memory_, |
| @@ -223,12 +225,12 @@ ResultCode HLERequestContext::WriteToOutgoingCommandBuffer(KThread& thread) { | |||
| 223 | // for specific values in each of these descriptors. | 225 | // for specific values in each of these descriptors. |
| 224 | for (auto& object : copy_objects) { | 226 | for (auto& object : copy_objects) { |
| 225 | ASSERT(object != nullptr); | 227 | ASSERT(object != nullptr); |
| 226 | dst_cmdbuf[current_offset++] = handle_table.Create(object).Unwrap(); | 228 | dst_cmdbuf[current_offset++] = handle_table.Create(SharedFrom(object)).Unwrap(); |
| 227 | } | 229 | } |
| 228 | 230 | ||
| 229 | for (auto& object : move_objects) { | 231 | for (auto& object : move_objects) { |
| 230 | ASSERT(object != nullptr); | 232 | ASSERT(object != nullptr); |
| 231 | dst_cmdbuf[current_offset++] = handle_table.Create(object).Unwrap(); | 233 | dst_cmdbuf[current_offset++] = handle_table.Create(SharedFrom(object)).Unwrap(); |
| 232 | } | 234 | } |
| 233 | } | 235 | } |
| 234 | 236 | ||
diff --git a/src/core/hle/kernel/hle_ipc.h b/src/core/hle/kernel/hle_ipc.h index 398f1c467..74a95bc76 100644 --- a/src/core/hle/kernel/hle_ipc.h +++ b/src/core/hle/kernel/hle_ipc.h | |||
| @@ -39,6 +39,7 @@ class HandleTable; | |||
| 39 | class HLERequestContext; | 39 | class HLERequestContext; |
| 40 | class KernelCore; | 40 | class KernelCore; |
| 41 | class Process; | 41 | class Process; |
| 42 | class ClientSession; | ||
| 42 | class ServerSession; | 43 | class ServerSession; |
| 43 | class KThread; | 44 | class KThread; |
| 44 | class KReadableEvent; | 45 | class KReadableEvent; |
| @@ -71,7 +72,8 @@ public: | |||
| 71 | * associated ServerSession alive for the duration of the connection. | 72 | * associated ServerSession alive for the duration of the connection. |
| 72 | * @param server_session Owning pointer to the ServerSession associated with the connection. | 73 | * @param server_session Owning pointer to the ServerSession associated with the connection. |
| 73 | */ | 74 | */ |
| 74 | void ClientConnected(std::shared_ptr<ServerSession> server_session); | 75 | void ClientConnected( |
| 76 | std::shared_ptr<ClientSession> client_session, std::shared_ptr<ServerSession> server_session); | ||
| 75 | 77 | ||
| 76 | /** | 78 | /** |
| 77 | * Signals that a client has just disconnected from this HLE handler and releases the | 79 | * Signals that a client has just disconnected from this HLE handler and releases the |
| @@ -84,7 +86,8 @@ protected: | |||
| 84 | /// List of sessions that are connected to this handler. | 86 | /// List of sessions that are connected to this handler. |
| 85 | /// A ServerSession whose server endpoint is an HLE implementation is kept alive by this list | 87 | /// A ServerSession whose server endpoint is an HLE implementation is kept alive by this list |
| 86 | /// for the duration of the connection. | 88 | /// for the duration of the connection. |
| 87 | std::vector<std::shared_ptr<ServerSession>> connected_sessions; | 89 | std::vector<std::shared_ptr<ClientSession>> client_sessions; |
| 90 | std::vector<std::shared_ptr<ServerSession>> server_sessions; | ||
| 88 | }; | 91 | }; |
| 89 | 92 | ||
| 90 | /** | 93 | /** |
| @@ -218,21 +221,21 @@ public: | |||
| 218 | } | 221 | } |
| 219 | 222 | ||
| 220 | template <typename T> | 223 | template <typename T> |
| 221 | std::shared_ptr<T> GetCopyObject(std::size_t index) { | 224 | T* GetCopyObject(std::size_t index) { |
| 222 | return DynamicObjectCast<T>(copy_objects.at(index)); | 225 | return DynamicObjectCast<T>(copy_objects.at(index)); |
| 223 | } | 226 | } |
| 224 | 227 | ||
| 225 | template <typename T> | 228 | template <typename T> |
| 226 | std::shared_ptr<T> GetMoveObject(std::size_t index) { | 229 | T* GetMoveObject(std::size_t index) { |
| 227 | return DynamicObjectCast<T>(move_objects.at(index)); | 230 | return DynamicObjectCast<T>(move_objects.at(index)); |
| 228 | } | 231 | } |
| 229 | 232 | ||
| 230 | void AddMoveObject(std::shared_ptr<Object> object) { | 233 | void AddMoveObject(Object* object) { |
| 231 | move_objects.emplace_back(std::move(object)); | 234 | move_objects.emplace_back(object); |
| 232 | } | 235 | } |
| 233 | 236 | ||
| 234 | void AddCopyObject(std::shared_ptr<Object> object) { | 237 | void AddCopyObject(Object* object) { |
| 235 | copy_objects.emplace_back(std::move(object)); | 238 | copy_objects.emplace_back(object); |
| 236 | } | 239 | } |
| 237 | 240 | ||
| 238 | void AddDomainObject(std::shared_ptr<SessionRequestHandler> object) { | 241 | void AddDomainObject(std::shared_ptr<SessionRequestHandler> object) { |
diff --git a/src/core/hle/kernel/k_event.h b/src/core/hle/kernel/k_event.h index 2fb887129..ec6894b16 100644 --- a/src/core/hle/kernel/k_event.h +++ b/src/core/hle/kernel/k_event.h | |||
| @@ -32,8 +32,8 @@ public: | |||
| 32 | return HANDLE_TYPE; | 32 | return HANDLE_TYPE; |
| 33 | } | 33 | } |
| 34 | 34 | ||
| 35 | std::shared_ptr<KReadableEvent>& GetReadableEvent() { | 35 | KReadableEvent* GetReadableEvent() { |
| 36 | return readable_event; | 36 | return readable_event.get(); |
| 37 | } | 37 | } |
| 38 | 38 | ||
| 39 | std::shared_ptr<KWritableEvent>& GetWritableEvent() { | 39 | std::shared_ptr<KWritableEvent>& GetWritableEvent() { |
diff --git a/src/core/hle/kernel/svc.cpp b/src/core/hle/kernel/svc.cpp index 813450115..dca1bcc92 100644 --- a/src/core/hle/kernel/svc.cpp +++ b/src/core/hle/kernel/svc.cpp | |||
| @@ -1976,7 +1976,7 @@ static ResultCode CreateEvent(Core::System& system, Handle* out_write, Handle* o | |||
| 1976 | auto handle_guard = SCOPE_GUARD({ handle_table.Remove(*write_create_result); }); | 1976 | auto handle_guard = SCOPE_GUARD({ handle_table.Remove(*write_create_result); }); |
| 1977 | 1977 | ||
| 1978 | // Add the readable event to the handle table. | 1978 | // Add the readable event to the handle table. |
| 1979 | const auto read_create_result = handle_table.Create(event->GetReadableEvent()); | 1979 | const auto read_create_result = handle_table.Create(SharedFrom(event->GetReadableEvent())); |
| 1980 | if (read_create_result.Failed()) { | 1980 | if (read_create_result.Failed()) { |
| 1981 | return read_create_result.Code(); | 1981 | return read_create_result.Code(); |
| 1982 | } | 1982 | } |
diff --git a/src/core/hle/service/am/am.cpp b/src/core/hle/service/am/am.cpp index 58c7f2930..7be94446a 100644 --- a/src/core/hle/service/am/am.cpp +++ b/src/core/hle/service/am/am.cpp | |||
| @@ -588,12 +588,11 @@ AppletMessageQueue::AppletMessageQueue(Kernel::KernelCore& kernel) { | |||
| 588 | 588 | ||
| 589 | AppletMessageQueue::~AppletMessageQueue() = default; | 589 | AppletMessageQueue::~AppletMessageQueue() = default; |
| 590 | 590 | ||
| 591 | const std::shared_ptr<Kernel::KReadableEvent>& AppletMessageQueue::GetMessageReceiveEvent() const { | 591 | Kernel::KReadableEvent* AppletMessageQueue::GetMessageReceiveEvent() const { |
| 592 | return on_new_message->GetReadableEvent(); | 592 | return on_new_message->GetReadableEvent(); |
| 593 | } | 593 | } |
| 594 | 594 | ||
| 595 | const std::shared_ptr<Kernel::KReadableEvent>& AppletMessageQueue::GetOperationModeChangedEvent() | 595 | Kernel::KReadableEvent* AppletMessageQueue::GetOperationModeChangedEvent() const { |
| 596 | const { | ||
| 597 | return on_operation_mode_changed->GetReadableEvent(); | 596 | return on_operation_mode_changed->GetReadableEvent(); |
| 598 | } | 597 | } |
| 599 | 598 | ||
diff --git a/src/core/hle/service/am/am.h b/src/core/hle/service/am/am.h index 5d302e155..f8daeb437 100644 --- a/src/core/hle/service/am/am.h +++ b/src/core/hle/service/am/am.h | |||
| @@ -56,8 +56,8 @@ public: | |||
| 56 | explicit AppletMessageQueue(Kernel::KernelCore& kernel); | 56 | explicit AppletMessageQueue(Kernel::KernelCore& kernel); |
| 57 | ~AppletMessageQueue(); | 57 | ~AppletMessageQueue(); |
| 58 | 58 | ||
| 59 | const std::shared_ptr<Kernel::KReadableEvent>& GetMessageReceiveEvent() const; | 59 | Kernel::KReadableEvent* GetMessageReceiveEvent() const; |
| 60 | const std::shared_ptr<Kernel::KReadableEvent>& GetOperationModeChangedEvent() const; | 60 | Kernel::KReadableEvent* GetOperationModeChangedEvent() const; |
| 61 | void PushMessage(AppletMessage msg); | 61 | void PushMessage(AppletMessage msg); |
| 62 | AppletMessage PopMessage(); | 62 | AppletMessage PopMessage(); |
| 63 | std::size_t GetMessageCount() const; | 63 | std::size_t GetMessageCount() const; |
diff --git a/src/core/hle/service/am/applets/applets.cpp b/src/core/hle/service/am/applets/applets.cpp index a56df6a7e..c093813fe 100644 --- a/src/core/hle/service/am/applets/applets.cpp +++ b/src/core/hle/service/am/applets/applets.cpp | |||
| @@ -142,15 +142,15 @@ void AppletDataBroker::SignalStateChanged() const { | |||
| 142 | } | 142 | } |
| 143 | } | 143 | } |
| 144 | 144 | ||
| 145 | std::shared_ptr<Kernel::KReadableEvent> AppletDataBroker::GetNormalDataEvent() const { | 145 | Kernel::KReadableEvent* AppletDataBroker::GetNormalDataEvent() const { |
| 146 | return pop_out_data_event->GetReadableEvent(); | 146 | return pop_out_data_event->GetReadableEvent(); |
| 147 | } | 147 | } |
| 148 | 148 | ||
| 149 | std::shared_ptr<Kernel::KReadableEvent> AppletDataBroker::GetInteractiveDataEvent() const { | 149 | Kernel::KReadableEvent* AppletDataBroker::GetInteractiveDataEvent() const { |
| 150 | return pop_interactive_out_data_event->GetReadableEvent(); | 150 | return pop_interactive_out_data_event->GetReadableEvent(); |
| 151 | } | 151 | } |
| 152 | 152 | ||
| 153 | std::shared_ptr<Kernel::KReadableEvent> AppletDataBroker::GetStateChangedEvent() const { | 153 | Kernel::KReadableEvent* AppletDataBroker::GetStateChangedEvent() const { |
| 154 | return state_changed_event->GetReadableEvent(); | 154 | return state_changed_event->GetReadableEvent(); |
| 155 | } | 155 | } |
| 156 | 156 | ||
diff --git a/src/core/hle/service/am/applets/applets.h b/src/core/hle/service/am/applets/applets.h index 4215d2232..ffde8ced0 100644 --- a/src/core/hle/service/am/applets/applets.h +++ b/src/core/hle/service/am/applets/applets.h | |||
| @@ -97,9 +97,9 @@ public: | |||
| 97 | 97 | ||
| 98 | void SignalStateChanged() const; | 98 | void SignalStateChanged() const; |
| 99 | 99 | ||
| 100 | std::shared_ptr<Kernel::KReadableEvent> GetNormalDataEvent() const; | 100 | Kernel::KReadableEvent* GetNormalDataEvent() const; |
| 101 | std::shared_ptr<Kernel::KReadableEvent> GetInteractiveDataEvent() const; | 101 | Kernel::KReadableEvent* GetInteractiveDataEvent() const; |
| 102 | std::shared_ptr<Kernel::KReadableEvent> GetStateChangedEvent() const; | 102 | Kernel::KReadableEvent* GetStateChangedEvent() const; |
| 103 | 103 | ||
| 104 | private: | 104 | private: |
| 105 | Core::System& system; | 105 | Core::System& system; |
diff --git a/src/core/hle/service/bcat/backend/backend.cpp b/src/core/hle/service/bcat/backend/backend.cpp index 92d25dbe4..7f301fdeb 100644 --- a/src/core/hle/service/bcat/backend/backend.cpp +++ b/src/core/hle/service/bcat/backend/backend.cpp | |||
| @@ -21,7 +21,7 @@ ProgressServiceBackend::ProgressServiceBackend(Kernel::KernelCore& kernel, | |||
| 21 | } | 21 | } |
| 22 | 22 | ||
| 23 | std::shared_ptr<Kernel::KReadableEvent> ProgressServiceBackend::GetEvent() const { | 23 | std::shared_ptr<Kernel::KReadableEvent> ProgressServiceBackend::GetEvent() const { |
| 24 | return event->GetReadableEvent(); | 24 | return SharedFrom(event->GetReadableEvent()); |
| 25 | } | 25 | } |
| 26 | 26 | ||
| 27 | DeliveryCacheProgressImpl& ProgressServiceBackend::GetImpl() { | 27 | DeliveryCacheProgressImpl& ProgressServiceBackend::GetImpl() { |
diff --git a/src/core/hle/service/bcat/module.cpp b/src/core/hle/service/bcat/module.cpp index 285085f2a..8473b716b 100644 --- a/src/core/hle/service/bcat/module.cpp +++ b/src/core/hle/service/bcat/module.cpp | |||
| @@ -109,7 +109,7 @@ private: | |||
| 109 | 109 | ||
| 110 | IPC::ResponseBuilder rb{ctx, 2, 1}; | 110 | IPC::ResponseBuilder rb{ctx, 2, 1}; |
| 111 | rb.Push(RESULT_SUCCESS); | 111 | rb.Push(RESULT_SUCCESS); |
| 112 | rb.PushCopyObjects(event); | 112 | rb.PushCopyObjects(event.get()); |
| 113 | } | 113 | } |
| 114 | 114 | ||
| 115 | void GetImpl(Kernel::HLERequestContext& ctx) { | 115 | void GetImpl(Kernel::HLERequestContext& ctx) { |
diff --git a/src/core/hle/service/hid/controllers/npad.cpp b/src/core/hle/service/hid/controllers/npad.cpp index d4678ef49..9d07ca09c 100644 --- a/src/core/hle/service/hid/controllers/npad.cpp +++ b/src/core/hle/service/hid/controllers/npad.cpp | |||
| @@ -955,8 +955,7 @@ bool Controller_NPad::IsVibrationDeviceMounted(const DeviceHandle& vibration_dev | |||
| 955 | return vibration_devices_mounted[npad_index][device_index]; | 955 | return vibration_devices_mounted[npad_index][device_index]; |
| 956 | } | 956 | } |
| 957 | 957 | ||
| 958 | std::shared_ptr<Kernel::KReadableEvent> Controller_NPad::GetStyleSetChangedEvent( | 958 | Kernel::KReadableEvent* Controller_NPad::GetStyleSetChangedEvent(u32 npad_id) const { |
| 959 | u32 npad_id) const { | ||
| 960 | const auto& styleset_event = styleset_changed_events[NPadIdToIndex(npad_id)]; | 959 | const auto& styleset_event = styleset_changed_events[NPadIdToIndex(npad_id)]; |
| 961 | return styleset_event->GetReadableEvent(); | 960 | return styleset_event->GetReadableEvent(); |
| 962 | } | 961 | } |
diff --git a/src/core/hle/service/hid/controllers/npad.h b/src/core/hle/service/hid/controllers/npad.h index ea484d4bf..8c24728b1 100644 --- a/src/core/hle/service/hid/controllers/npad.h +++ b/src/core/hle/service/hid/controllers/npad.h | |||
| @@ -199,7 +199,7 @@ public: | |||
| 199 | 199 | ||
| 200 | bool IsVibrationDeviceMounted(const DeviceHandle& vibration_device_handle) const; | 200 | bool IsVibrationDeviceMounted(const DeviceHandle& vibration_device_handle) const; |
| 201 | 201 | ||
| 202 | std::shared_ptr<Kernel::KReadableEvent> GetStyleSetChangedEvent(u32 npad_id) const; | 202 | Kernel::KReadableEvent* GetStyleSetChangedEvent(u32 npad_id) const; |
| 203 | void SignalStyleSetChangedEvent(u32 npad_id) const; | 203 | void SignalStyleSetChangedEvent(u32 npad_id) const; |
| 204 | 204 | ||
| 205 | // Adds a new controller at an index. | 205 | // Adds a new controller at an index. |
diff --git a/src/core/hle/service/hid/hid.cpp b/src/core/hle/service/hid/hid.cpp index 9c4bf6d16..d2a6375f5 100644 --- a/src/core/hle/service/hid/hid.cpp +++ b/src/core/hle/service/hid/hid.cpp | |||
| @@ -118,7 +118,7 @@ void IAppletResource::GetSharedMemoryHandle(Kernel::HLERequestContext& ctx) { | |||
| 118 | 118 | ||
| 119 | IPC::ResponseBuilder rb{ctx, 2, 1}; | 119 | IPC::ResponseBuilder rb{ctx, 2, 1}; |
| 120 | rb.Push(RESULT_SUCCESS); | 120 | rb.Push(RESULT_SUCCESS); |
| 121 | rb.PushCopyObjects(shared_mem); | 121 | rb.PushCopyObjects(shared_mem.get()); |
| 122 | } | 122 | } |
| 123 | 123 | ||
| 124 | void IAppletResource::UpdateControllers(std::uintptr_t user_data, | 124 | void IAppletResource::UpdateControllers(std::uintptr_t user_data, |
diff --git a/src/core/hle/service/hid/irs.cpp b/src/core/hle/service/hid/irs.cpp index 2dfa936fb..b50a51eb7 100644 --- a/src/core/hle/service/hid/irs.cpp +++ b/src/core/hle/service/hid/irs.cpp | |||
| @@ -62,7 +62,7 @@ void IRS::GetIrsensorSharedMemoryHandle(Kernel::HLERequestContext& ctx) { | |||
| 62 | 62 | ||
| 63 | IPC::ResponseBuilder rb{ctx, 2, 1}; | 63 | IPC::ResponseBuilder rb{ctx, 2, 1}; |
| 64 | rb.Push(RESULT_SUCCESS); | 64 | rb.Push(RESULT_SUCCESS); |
| 65 | rb.PushCopyObjects(shared_mem); | 65 | rb.PushCopyObjects(shared_mem.get()); |
| 66 | } | 66 | } |
| 67 | 67 | ||
| 68 | void IRS::StopImageProcessor(Kernel::HLERequestContext& ctx) { | 68 | void IRS::StopImageProcessor(Kernel::HLERequestContext& ctx) { |
diff --git a/src/core/hle/service/nfp/nfp.cpp b/src/core/hle/service/nfp/nfp.cpp index 2d1d4d67f..1446c0bcf 100644 --- a/src/core/hle/service/nfp/nfp.cpp +++ b/src/core/hle/service/nfp/nfp.cpp | |||
| @@ -343,7 +343,7 @@ bool Module::Interface::LoadAmiibo(const std::vector<u8>& buffer) { | |||
| 343 | return true; | 343 | return true; |
| 344 | } | 344 | } |
| 345 | 345 | ||
| 346 | const std::shared_ptr<Kernel::KReadableEvent>& Module::Interface::GetNFCEvent() const { | 346 | Kernel::KReadableEvent* Module::Interface::GetNFCEvent() const { |
| 347 | return nfc_tag_load->GetReadableEvent(); | 347 | return nfc_tag_load->GetReadableEvent(); |
| 348 | } | 348 | } |
| 349 | 349 | ||
diff --git a/src/core/hle/service/nfp/nfp.h b/src/core/hle/service/nfp/nfp.h index c46551760..7a97caffb 100644 --- a/src/core/hle/service/nfp/nfp.h +++ b/src/core/hle/service/nfp/nfp.h | |||
| @@ -38,7 +38,7 @@ public: | |||
| 38 | 38 | ||
| 39 | void CreateUserInterface(Kernel::HLERequestContext& ctx); | 39 | void CreateUserInterface(Kernel::HLERequestContext& ctx); |
| 40 | bool LoadAmiibo(const std::vector<u8>& buffer); | 40 | bool LoadAmiibo(const std::vector<u8>& buffer); |
| 41 | const std::shared_ptr<Kernel::KReadableEvent>& GetNFCEvent() const; | 41 | Kernel::KReadableEvent* GetNFCEvent() const; |
| 42 | const AmiiboFile& GetAmiiboBuffer() const; | 42 | const AmiiboFile& GetAmiiboBuffer() const; |
| 43 | 43 | ||
| 44 | private: | 44 | private: |
diff --git a/src/core/hle/service/ns/pl_u.cpp b/src/core/hle/service/ns/pl_u.cpp index da139fdc4..e6616a3b9 100644 --- a/src/core/hle/service/ns/pl_u.cpp +++ b/src/core/hle/service/ns/pl_u.cpp | |||
| @@ -267,7 +267,7 @@ void PL_U::GetSharedMemoryNativeHandle(Kernel::HLERequestContext& ctx) { | |||
| 267 | 267 | ||
| 268 | IPC::ResponseBuilder rb{ctx, 2, 1}; | 268 | IPC::ResponseBuilder rb{ctx, 2, 1}; |
| 269 | rb.Push(RESULT_SUCCESS); | 269 | rb.Push(RESULT_SUCCESS); |
| 270 | rb.PushCopyObjects(impl->shared_font_mem); | 270 | rb.PushCopyObjects(impl->shared_font_mem.get()); |
| 271 | } | 271 | } |
| 272 | 272 | ||
| 273 | void PL_U::GetSharedFontInOrderOfPriority(Kernel::HLERequestContext& ctx) { | 273 | void PL_U::GetSharedFontInOrderOfPriority(Kernel::HLERequestContext& ctx) { |
diff --git a/src/core/hle/service/nvdrv/interface.cpp b/src/core/hle/service/nvdrv/interface.cpp index eff9c3cc9..8e359040f 100644 --- a/src/core/hle/service/nvdrv/interface.cpp +++ b/src/core/hle/service/nvdrv/interface.cpp | |||
| @@ -189,7 +189,7 @@ void NVDRV::QueryEvent(Kernel::HLERequestContext& ctx) { | |||
| 189 | rb.Push(RESULT_SUCCESS); | 189 | rb.Push(RESULT_SUCCESS); |
| 190 | auto event = nvdrv->GetEvent(event_id); | 190 | auto event = nvdrv->GetEvent(event_id); |
| 191 | event->Clear(); | 191 | event->Clear(); |
| 192 | rb.PushCopyObjects(event); | 192 | rb.PushCopyObjects(event.get()); |
| 193 | rb.PushEnum(NvResult::Success); | 193 | rb.PushEnum(NvResult::Success); |
| 194 | } else { | 194 | } else { |
| 195 | IPC::ResponseBuilder rb{ctx, 3}; | 195 | IPC::ResponseBuilder rb{ctx, 3}; |
diff --git a/src/core/hle/service/nvdrv/nvdrv.cpp b/src/core/hle/service/nvdrv/nvdrv.cpp index ede77858a..6bba9c0b3 100644 --- a/src/core/hle/service/nvdrv/nvdrv.cpp +++ b/src/core/hle/service/nvdrv/nvdrv.cpp | |||
| @@ -178,7 +178,7 @@ void Module::SignalSyncpt(const u32 syncpoint_id, const u32 value) { | |||
| 178 | } | 178 | } |
| 179 | 179 | ||
| 180 | std::shared_ptr<Kernel::KReadableEvent> Module::GetEvent(const u32 event_id) const { | 180 | std::shared_ptr<Kernel::KReadableEvent> Module::GetEvent(const u32 event_id) const { |
| 181 | return events_interface.events[event_id].event->GetReadableEvent(); | 181 | return SharedFrom(events_interface.events[event_id].event->GetReadableEvent()); |
| 182 | } | 182 | } |
| 183 | 183 | ||
| 184 | std::shared_ptr<Kernel::KWritableEvent> Module::GetEventWriteable(const u32 event_id) const { | 184 | std::shared_ptr<Kernel::KWritableEvent> Module::GetEventWriteable(const u32 event_id) const { |
diff --git a/src/core/hle/service/nvflinger/buffer_queue.cpp b/src/core/hle/service/nvflinger/buffer_queue.cpp index 7842a82ed..f783ae54f 100644 --- a/src/core/hle/service/nvflinger/buffer_queue.cpp +++ b/src/core/hle/service/nvflinger/buffer_queue.cpp | |||
| @@ -194,7 +194,7 @@ std::shared_ptr<Kernel::KWritableEvent> BufferQueue::GetWritableBufferWaitEvent( | |||
| 194 | } | 194 | } |
| 195 | 195 | ||
| 196 | std::shared_ptr<Kernel::KReadableEvent> BufferQueue::GetBufferWaitEvent() const { | 196 | std::shared_ptr<Kernel::KReadableEvent> BufferQueue::GetBufferWaitEvent() const { |
| 197 | return buffer_wait_event->GetReadableEvent(); | 197 | return SharedFrom(buffer_wait_event->GetReadableEvent()); |
| 198 | } | 198 | } |
| 199 | 199 | ||
| 200 | } // namespace Service::NVFlinger | 200 | } // namespace Service::NVFlinger |
diff --git a/src/core/hle/service/nvflinger/buffer_queue.h b/src/core/hle/service/nvflinger/buffer_queue.h index 163fa4c54..9a21c7426 100644 --- a/src/core/hle/service/nvflinger/buffer_queue.h +++ b/src/core/hle/service/nvflinger/buffer_queue.h | |||
| @@ -13,6 +13,7 @@ | |||
| 13 | #include "common/common_funcs.h" | 13 | #include "common/common_funcs.h" |
| 14 | #include "common/math_util.h" | 14 | #include "common/math_util.h" |
| 15 | #include "common/swap.h" | 15 | #include "common/swap.h" |
| 16 | #include "core/hle/kernel/k_readable_event.h" | ||
| 16 | #include "core/hle/kernel/object.h" | 17 | #include "core/hle/kernel/object.h" |
| 17 | #include "core/hle/service/nvdrv/nvdata.h" | 18 | #include "core/hle/service/nvdrv/nvdata.h" |
| 18 | 19 | ||
diff --git a/src/core/hle/service/sm/controller.cpp b/src/core/hle/service/sm/controller.cpp index 916177efd..b34fe4bc2 100644 --- a/src/core/hle/service/sm/controller.cpp +++ b/src/core/hle/service/sm/controller.cpp | |||
| @@ -30,7 +30,7 @@ void Controller::CloneCurrentObject(Kernel::HLERequestContext& ctx) { | |||
| 30 | 30 | ||
| 31 | IPC::ResponseBuilder rb{ctx, 2, 0, 1, IPC::ResponseBuilder::Flags::AlwaysMoveHandles}; | 31 | IPC::ResponseBuilder rb{ctx, 2, 0, 1, IPC::ResponseBuilder::Flags::AlwaysMoveHandles}; |
| 32 | rb.Push(RESULT_SUCCESS); | 32 | rb.Push(RESULT_SUCCESS); |
| 33 | rb.PushMoveObjects(ctx.Session()->GetParent()->Client()); | 33 | rb.PushMoveObjects(ctx.Session()->GetParent()->Client().get()); |
| 34 | } | 34 | } |
| 35 | 35 | ||
| 36 | void Controller::CloneCurrentObjectEx(Kernel::HLERequestContext& ctx) { | 36 | void Controller::CloneCurrentObjectEx(Kernel::HLERequestContext& ctx) { |
diff --git a/src/core/hle/service/sm/sm.cpp b/src/core/hle/service/sm/sm.cpp index 94608d529..62f7a5358 100644 --- a/src/core/hle/service/sm/sm.cpp +++ b/src/core/hle/service/sm/sm.cpp | |||
| @@ -134,7 +134,7 @@ void SM::GetService(Kernel::HLERequestContext& ctx) { | |||
| 134 | 134 | ||
| 135 | const auto& server_port = client_port.Unwrap()->GetServerPort(); | 135 | const auto& server_port = client_port.Unwrap()->GetServerPort(); |
| 136 | if (server_port->GetHLEHandler()) { | 136 | if (server_port->GetHLEHandler()) { |
| 137 | server_port->GetHLEHandler()->ClientConnected(server); | 137 | server_port->GetHLEHandler()->ClientConnected(client, server); |
| 138 | } else { | 138 | } else { |
| 139 | server_port->AppendPendingSession(server); | 139 | server_port->AppendPendingSession(server); |
| 140 | } | 140 | } |
| @@ -142,7 +142,7 @@ void SM::GetService(Kernel::HLERequestContext& ctx) { | |||
| 142 | LOG_DEBUG(Service_SM, "called service={} -> session={}", name, client->GetObjectId()); | 142 | LOG_DEBUG(Service_SM, "called service={} -> session={}", name, client->GetObjectId()); |
| 143 | IPC::ResponseBuilder rb{ctx, 2, 0, 1, IPC::ResponseBuilder::Flags::AlwaysMoveHandles}; | 143 | IPC::ResponseBuilder rb{ctx, 2, 0, 1, IPC::ResponseBuilder::Flags::AlwaysMoveHandles}; |
| 144 | rb.Push(RESULT_SUCCESS); | 144 | rb.Push(RESULT_SUCCESS); |
| 145 | rb.PushMoveObjects(std::move(client)); | 145 | rb.PushMoveObjects(client.get()); |
| 146 | } | 146 | } |
| 147 | 147 | ||
| 148 | void SM::RegisterService(Kernel::HLERequestContext& ctx) { | 148 | void SM::RegisterService(Kernel::HLERequestContext& ctx) { |
| @@ -170,7 +170,9 @@ void SM::RegisterService(Kernel::HLERequestContext& ctx) { | |||
| 170 | 170 | ||
| 171 | IPC::ResponseBuilder rb{ctx, 2, 0, 1, IPC::ResponseBuilder::Flags::AlwaysMoveHandles}; | 171 | IPC::ResponseBuilder rb{ctx, 2, 0, 1, IPC::ResponseBuilder::Flags::AlwaysMoveHandles}; |
| 172 | rb.Push(handle.Code()); | 172 | rb.Push(handle.Code()); |
| 173 | rb.PushMoveObjects(std::move(handle).Unwrap()); | 173 | |
| 174 | auto server_port = handle.Unwrap(); | ||
| 175 | rb.PushMoveObjects(server_port.get()); | ||
| 174 | } | 176 | } |
| 175 | 177 | ||
| 176 | void SM::UnregisterService(Kernel::HLERequestContext& ctx) { | 178 | void SM::UnregisterService(Kernel::HLERequestContext& ctx) { |
diff --git a/src/core/hle/service/time/time.cpp b/src/core/hle/service/time/time.cpp index 32f372d71..30283f239 100644 --- a/src/core/hle/service/time/time.cpp +++ b/src/core/hle/service/time/time.cpp | |||
| @@ -393,7 +393,7 @@ void Module::Interface::GetSharedMemoryNativeHandle(Kernel::HLERequestContext& c | |||
| 393 | LOG_DEBUG(Service_Time, "called"); | 393 | LOG_DEBUG(Service_Time, "called"); |
| 394 | IPC::ResponseBuilder rb{ctx, 2, 1}; | 394 | IPC::ResponseBuilder rb{ctx, 2, 1}; |
| 395 | rb.Push(RESULT_SUCCESS); | 395 | rb.Push(RESULT_SUCCESS); |
| 396 | rb.PushCopyObjects(SharedFrom(&system.Kernel().GetTimeSharedMem())); | 396 | rb.PushCopyObjects(&system.Kernel().GetTimeSharedMem()); |
| 397 | } | 397 | } |
| 398 | 398 | ||
| 399 | Module::Interface::Interface(std::shared_ptr<Module> module_, Core::System& system_, | 399 | Module::Interface::Interface(std::shared_ptr<Module> module_, Core::System& system_, |
diff --git a/src/core/hle/service/vi/display/vi_display.cpp b/src/core/hle/service/vi/display/vi_display.cpp index ac9e87338..9ffa71352 100644 --- a/src/core/hle/service/vi/display/vi_display.cpp +++ b/src/core/hle/service/vi/display/vi_display.cpp | |||
| @@ -34,7 +34,7 @@ const Layer& Display::GetLayer(std::size_t index) const { | |||
| 34 | } | 34 | } |
| 35 | 35 | ||
| 36 | std::shared_ptr<Kernel::KReadableEvent> Display::GetVSyncEvent() const { | 36 | std::shared_ptr<Kernel::KReadableEvent> Display::GetVSyncEvent() const { |
| 37 | return vsync_event->GetReadableEvent(); | 37 | return SharedFrom(vsync_event->GetReadableEvent()); |
| 38 | } | 38 | } |
| 39 | 39 | ||
| 40 | void Display::SignalVSyncEvent() { | 40 | void Display::SignalVSyncEvent() { |
diff --git a/src/core/hle/service/vi/vi.cpp b/src/core/hle/service/vi/vi.cpp index 7ae07d072..6e507bfb8 100644 --- a/src/core/hle/service/vi/vi.cpp +++ b/src/core/hle/service/vi/vi.cpp | |||
| @@ -674,7 +674,7 @@ private: | |||
| 674 | // TODO(Subv): Find out what this actually is. | 674 | // TODO(Subv): Find out what this actually is. |
| 675 | IPC::ResponseBuilder rb{ctx, 2, 1}; | 675 | IPC::ResponseBuilder rb{ctx, 2, 1}; |
| 676 | rb.Push(RESULT_SUCCESS); | 676 | rb.Push(RESULT_SUCCESS); |
| 677 | rb.PushCopyObjects(buffer_queue.GetBufferWaitEvent()); | 677 | rb.PushCopyObjects(buffer_queue.GetBufferWaitEvent().get()); |
| 678 | } | 678 | } |
| 679 | 679 | ||
| 680 | NVFlinger::NVFlinger& nv_flinger; | 680 | NVFlinger::NVFlinger& nv_flinger; |
| @@ -1209,7 +1209,7 @@ private: | |||
| 1209 | 1209 | ||
| 1210 | IPC::ResponseBuilder rb{ctx, 2, 1}; | 1210 | IPC::ResponseBuilder rb{ctx, 2, 1}; |
| 1211 | rb.Push(RESULT_SUCCESS); | 1211 | rb.Push(RESULT_SUCCESS); |
| 1212 | rb.PushCopyObjects(vsync_event); | 1212 | rb.PushCopyObjects(vsync_event.get()); |
| 1213 | } | 1213 | } |
| 1214 | 1214 | ||
| 1215 | void ConvertScalingMode(Kernel::HLERequestContext& ctx) { | 1215 | void ConvertScalingMode(Kernel::HLERequestContext& ctx) { |