diff options
| author | 2021-01-16 00:25:29 -0800 | |
|---|---|---|
| committer | 2021-01-28 21:42:26 -0800 | |
| commit | ff186b2498e5f3119e0d03a859754722e1948c62 (patch) | |
| tree | 3bfe09f91736044f8187af6df737f61012e55801 /src/core/hle/kernel | |
| parent | core: hle: kernel: svc_results: Populate with several missing error codes. (diff) | |
| download | yuzu-ff186b2498e5f3119e0d03a859754722e1948c62.tar.gz yuzu-ff186b2498e5f3119e0d03a859754722e1948c62.tar.xz yuzu-ff186b2498e5f3119e0d03a859754722e1948c62.zip | |
core: hle: kernel: object: Implement Finalize() virtual method.
Diffstat (limited to 'src/core/hle/kernel')
| -rw-r--r-- | src/core/hle/kernel/client_port.h | 2 | ||||
| -rw-r--r-- | src/core/hle/kernel/client_session.h | 2 | ||||
| -rw-r--r-- | src/core/hle/kernel/handle_table.cpp | 4 | ||||
| -rw-r--r-- | src/core/hle/kernel/k_synchronization_object.cpp | 2 | ||||
| -rw-r--r-- | src/core/hle/kernel/object.h | 2 | ||||
| -rw-r--r-- | src/core/hle/kernel/process.h | 2 | ||||
| -rw-r--r-- | src/core/hle/kernel/readable_event.h | 2 | ||||
| -rw-r--r-- | src/core/hle/kernel/resource_limit.h | 2 | ||||
| -rw-r--r-- | src/core/hle/kernel/server_port.h | 2 | ||||
| -rw-r--r-- | src/core/hle/kernel/server_session.h | 2 | ||||
| -rw-r--r-- | src/core/hle/kernel/session.h | 2 | ||||
| -rw-r--r-- | src/core/hle/kernel/shared_memory.h | 2 | ||||
| -rw-r--r-- | src/core/hle/kernel/transfer_memory.h | 2 | ||||
| -rw-r--r-- | src/core/hle/kernel/writable_event.cpp | 4 | ||||
| -rw-r--r-- | src/core/hle/kernel/writable_event.h | 3 |
15 files changed, 29 insertions, 6 deletions
diff --git a/src/core/hle/kernel/client_port.h b/src/core/hle/kernel/client_port.h index 9762bbf0d..77559ebf9 100644 --- a/src/core/hle/kernel/client_port.h +++ b/src/core/hle/kernel/client_port.h | |||
| @@ -51,6 +51,8 @@ public: | |||
| 51 | */ | 51 | */ |
| 52 | void ConnectionClosed(); | 52 | void ConnectionClosed(); |
| 53 | 53 | ||
| 54 | void Finalize() override {} | ||
| 55 | |||
| 54 | private: | 56 | private: |
| 55 | std::shared_ptr<ServerPort> server_port; ///< ServerPort associated with this client port. | 57 | std::shared_ptr<ServerPort> server_port; ///< ServerPort associated with this client port. |
| 56 | u32 max_sessions = 0; ///< Maximum number of simultaneous sessions the port can have | 58 | u32 max_sessions = 0; ///< Maximum number of simultaneous sessions the port can have |
diff --git a/src/core/hle/kernel/client_session.h b/src/core/hle/kernel/client_session.h index a914c0990..85aafeaf4 100644 --- a/src/core/hle/kernel/client_session.h +++ b/src/core/hle/kernel/client_session.h | |||
| @@ -51,6 +51,8 @@ public: | |||
| 51 | 51 | ||
| 52 | bool IsSignaled() const override; | 52 | bool IsSignaled() const override; |
| 53 | 53 | ||
| 54 | void Finalize() override {} | ||
| 55 | |||
| 54 | private: | 56 | private: |
| 55 | static ResultVal<std::shared_ptr<ClientSession>> Create(KernelCore& kernel, | 57 | static ResultVal<std::shared_ptr<ClientSession>> Create(KernelCore& kernel, |
| 56 | std::shared_ptr<Session> parent, | 58 | std::shared_ptr<Session> parent, |
diff --git a/src/core/hle/kernel/handle_table.cpp b/src/core/hle/kernel/handle_table.cpp index 10a4e0510..1a2fa9cd8 100644 --- a/src/core/hle/kernel/handle_table.cpp +++ b/src/core/hle/kernel/handle_table.cpp | |||
| @@ -89,6 +89,10 @@ ResultCode HandleTable::Close(Handle handle) { | |||
| 89 | 89 | ||
| 90 | const u16 slot = GetSlot(handle); | 90 | const u16 slot = GetSlot(handle); |
| 91 | 91 | ||
| 92 | if (objects[slot].use_count() == 1) { | ||
| 93 | objects[slot]->Finalize(); | ||
| 94 | } | ||
| 95 | |||
| 92 | objects[slot] = nullptr; | 96 | objects[slot] = nullptr; |
| 93 | 97 | ||
| 94 | generations[slot] = next_free_slot; | 98 | generations[slot] = next_free_slot; |
diff --git a/src/core/hle/kernel/k_synchronization_object.cpp b/src/core/hle/kernel/k_synchronization_object.cpp index 61432fef8..18e7026f5 100644 --- a/src/core/hle/kernel/k_synchronization_object.cpp +++ b/src/core/hle/kernel/k_synchronization_object.cpp | |||
| @@ -136,7 +136,7 @@ ResultCode KSynchronizationObject::Wait(KernelCore& kernel, s32* out_index, | |||
| 136 | 136 | ||
| 137 | KSynchronizationObject::KSynchronizationObject(KernelCore& kernel) : Object{kernel} {} | 137 | KSynchronizationObject::KSynchronizationObject(KernelCore& kernel) : Object{kernel} {} |
| 138 | 138 | ||
| 139 | KSynchronizationObject ::~KSynchronizationObject() = default; | 139 | KSynchronizationObject::~KSynchronizationObject() = default; |
| 140 | 140 | ||
| 141 | void KSynchronizationObject::NotifyAvailable(ResultCode result) { | 141 | void KSynchronizationObject::NotifyAvailable(ResultCode result) { |
| 142 | KScopedSchedulerLock lock(kernel); | 142 | KScopedSchedulerLock lock(kernel); |
diff --git a/src/core/hle/kernel/object.h b/src/core/hle/kernel/object.h index 27124ef67..be7fcb5fb 100644 --- a/src/core/hle/kernel/object.h +++ b/src/core/hle/kernel/object.h | |||
| @@ -61,6 +61,8 @@ public: | |||
| 61 | */ | 61 | */ |
| 62 | bool IsWaitable() const; | 62 | bool IsWaitable() const; |
| 63 | 63 | ||
| 64 | virtual void Finalize() = 0; | ||
| 65 | |||
| 64 | protected: | 66 | protected: |
| 65 | /// The kernel instance this object was created under. | 67 | /// The kernel instance this object was created under. |
| 66 | KernelCore& kernel; | 68 | KernelCore& kernel; |
diff --git a/src/core/hle/kernel/process.h b/src/core/hle/kernel/process.h index 5a2cfdb36..917babfb4 100644 --- a/src/core/hle/kernel/process.h +++ b/src/core/hle/kernel/process.h | |||
| @@ -308,6 +308,8 @@ public: | |||
| 308 | 308 | ||
| 309 | bool IsSignaled() const override; | 309 | bool IsSignaled() const override; |
| 310 | 310 | ||
| 311 | void Finalize() override {} | ||
| 312 | |||
| 311 | /////////////////////////////////////////////////////////////////////////////////////////////// | 313 | /////////////////////////////////////////////////////////////////////////////////////////////// |
| 312 | // Thread-local storage management | 314 | // Thread-local storage management |
| 313 | 315 | ||
diff --git a/src/core/hle/kernel/readable_event.h b/src/core/hle/kernel/readable_event.h index 34e477274..2195710c2 100644 --- a/src/core/hle/kernel/readable_event.h +++ b/src/core/hle/kernel/readable_event.h | |||
| @@ -47,6 +47,8 @@ public: | |||
| 47 | 47 | ||
| 48 | bool IsSignaled() const override; | 48 | bool IsSignaled() const override; |
| 49 | 49 | ||
| 50 | void Finalize() override {} | ||
| 51 | |||
| 50 | private: | 52 | private: |
| 51 | explicit ReadableEvent(KernelCore& kernel); | 53 | explicit ReadableEvent(KernelCore& kernel); |
| 52 | 54 | ||
diff --git a/src/core/hle/kernel/resource_limit.h b/src/core/hle/kernel/resource_limit.h index 936cc4d0f..464d4f2a6 100644 --- a/src/core/hle/kernel/resource_limit.h +++ b/src/core/hle/kernel/resource_limit.h | |||
| @@ -85,6 +85,8 @@ public: | |||
| 85 | */ | 85 | */ |
| 86 | ResultCode SetLimitValue(ResourceType resource, s64 value); | 86 | ResultCode SetLimitValue(ResourceType resource, s64 value); |
| 87 | 87 | ||
| 88 | void Finalize() override {} | ||
| 89 | |||
| 88 | private: | 90 | private: |
| 89 | // TODO(Subv): Increment resource limit current values in their respective Kernel::T::Create | 91 | // TODO(Subv): Increment resource limit current values in their respective Kernel::T::Create |
| 90 | // functions | 92 | // functions |
diff --git a/src/core/hle/kernel/server_port.h b/src/core/hle/kernel/server_port.h index 6470df993..29b4f2509 100644 --- a/src/core/hle/kernel/server_port.h +++ b/src/core/hle/kernel/server_port.h | |||
| @@ -81,6 +81,8 @@ public: | |||
| 81 | 81 | ||
| 82 | bool IsSignaled() const override; | 82 | bool IsSignaled() const override; |
| 83 | 83 | ||
| 84 | void Finalize() override {} | ||
| 85 | |||
| 84 | private: | 86 | private: |
| 85 | /// ServerSessions waiting to be accepted by the port | 87 | /// ServerSessions waiting to be accepted by the port |
| 86 | std::vector<std::shared_ptr<ServerSession>> pending_sessions; | 88 | std::vector<std::shared_ptr<ServerSession>> pending_sessions; |
diff --git a/src/core/hle/kernel/server_session.h b/src/core/hle/kernel/server_session.h index d45cddec3..c42d5ee59 100644 --- a/src/core/hle/kernel/server_session.h +++ b/src/core/hle/kernel/server_session.h | |||
| @@ -126,6 +126,8 @@ public: | |||
| 126 | 126 | ||
| 127 | bool IsSignaled() const override; | 127 | bool IsSignaled() const override; |
| 128 | 128 | ||
| 129 | void Finalize() override {} | ||
| 130 | |||
| 129 | private: | 131 | private: |
| 130 | /// Queues a sync request from the emulated application. | 132 | /// Queues a sync request from the emulated application. |
| 131 | ResultCode QueueSyncRequest(std::shared_ptr<KThread> thread, Core::Memory::Memory& memory); | 133 | ResultCode QueueSyncRequest(std::shared_ptr<KThread> thread, Core::Memory::Memory& memory); |
diff --git a/src/core/hle/kernel/session.h b/src/core/hle/kernel/session.h index f6dd2c1d2..fa3c5651a 100644 --- a/src/core/hle/kernel/session.h +++ b/src/core/hle/kernel/session.h | |||
| @@ -39,6 +39,8 @@ public: | |||
| 39 | 39 | ||
| 40 | bool IsSignaled() const override; | 40 | bool IsSignaled() const override; |
| 41 | 41 | ||
| 42 | void Finalize() override {} | ||
| 43 | |||
| 42 | std::shared_ptr<ClientSession> Client() { | 44 | std::shared_ptr<ClientSession> Client() { |
| 43 | if (auto result{client.lock()}) { | 45 | if (auto result{client.lock()}) { |
| 44 | return result; | 46 | return result; |
diff --git a/src/core/hle/kernel/shared_memory.h b/src/core/hle/kernel/shared_memory.h index 0ef87235c..623bd8b11 100644 --- a/src/core/hle/kernel/shared_memory.h +++ b/src/core/hle/kernel/shared_memory.h | |||
| @@ -71,6 +71,8 @@ public: | |||
| 71 | return device_memory.GetPointer(physical_address + offset); | 71 | return device_memory.GetPointer(physical_address + offset); |
| 72 | } | 72 | } |
| 73 | 73 | ||
| 74 | void Finalize() override {} | ||
| 75 | |||
| 74 | private: | 76 | private: |
| 75 | Core::DeviceMemory& device_memory; | 77 | Core::DeviceMemory& device_memory; |
| 76 | Process* owner_process{}; | 78 | Process* owner_process{}; |
diff --git a/src/core/hle/kernel/transfer_memory.h b/src/core/hle/kernel/transfer_memory.h index 05e9f7464..777799d12 100644 --- a/src/core/hle/kernel/transfer_memory.h +++ b/src/core/hle/kernel/transfer_memory.h | |||
| @@ -72,6 +72,8 @@ public: | |||
| 72 | /// is closed. | 72 | /// is closed. |
| 73 | ResultCode Reset(); | 73 | ResultCode Reset(); |
| 74 | 74 | ||
| 75 | void Finalize() override {} | ||
| 76 | |||
| 75 | private: | 77 | private: |
| 76 | /// The base address for the memory managed by this instance. | 78 | /// The base address for the memory managed by this instance. |
| 77 | VAddr base_address{}; | 79 | VAddr base_address{}; |
diff --git a/src/core/hle/kernel/writable_event.cpp b/src/core/hle/kernel/writable_event.cpp index dbe34472b..142212ee4 100644 --- a/src/core/hle/kernel/writable_event.cpp +++ b/src/core/hle/kernel/writable_event.cpp | |||
| @@ -38,8 +38,4 @@ void WritableEvent::Clear() { | |||
| 38 | readable->Clear(); | 38 | readable->Clear(); |
| 39 | } | 39 | } |
| 40 | 40 | ||
| 41 | bool WritableEvent::IsSignaled() const { | ||
| 42 | return readable->IsSignaled(); | ||
| 43 | } | ||
| 44 | |||
| 45 | } // namespace Kernel | 41 | } // namespace Kernel |
diff --git a/src/core/hle/kernel/writable_event.h b/src/core/hle/kernel/writable_event.h index 6189cf65c..467eb2c21 100644 --- a/src/core/hle/kernel/writable_event.h +++ b/src/core/hle/kernel/writable_event.h | |||
| @@ -46,7 +46,8 @@ public: | |||
| 46 | 46 | ||
| 47 | void Signal(); | 47 | void Signal(); |
| 48 | void Clear(); | 48 | void Clear(); |
| 49 | bool IsSignaled() const; | 49 | |
| 50 | void Finalize() override {} | ||
| 50 | 51 | ||
| 51 | private: | 52 | private: |
| 52 | explicit WritableEvent(KernelCore& kernel); | 53 | explicit WritableEvent(KernelCore& kernel); |