diff options
author | bunnei <bunneidev@gmail.com> | 2021-08-07 08:05:01 +0200 |
---|---|---|
committer | bunnei <bunneidev@gmail.com> | 2021-12-07 01:39:16 +0100 |
commit | 4c18a207a4898f391afab5d7e44c1c2921bc9d6f (patch) | |
tree | 6d54ba9561b01681820f06e0d6530d79676546f6 /src/core | |
parent | core: hle: kernel: k_thread: Add KScopedDisableDispatch. (diff) | |
download | yuzu-4c18a207a4898f391afab5d7e44c1c2921bc9d6f.tar yuzu-4c18a207a4898f391afab5d7e44c1c2921bc9d6f.tar.gz yuzu-4c18a207a4898f391afab5d7e44c1c2921bc9d6f.tar.bz2 yuzu-4c18a207a4898f391afab5d7e44c1c2921bc9d6f.tar.lz yuzu-4c18a207a4898f391afab5d7e44c1c2921bc9d6f.tar.xz yuzu-4c18a207a4898f391afab5d7e44c1c2921bc9d6f.tar.zst yuzu-4c18a207a4898f391afab5d7e44c1c2921bc9d6f.zip |
Diffstat (limited to 'src/core')
-rw-r--r-- | src/core/hle/kernel/k_handle_table.cpp | 6 | ||||
-rw-r--r-- | src/core/hle/kernel/k_handle_table.h | 2 |
2 files changed, 8 insertions, 0 deletions
diff --git a/src/core/hle/kernel/k_handle_table.cpp b/src/core/hle/kernel/k_handle_table.cpp index e90fc0628..cf95f0852 100644 --- a/src/core/hle/kernel/k_handle_table.cpp +++ b/src/core/hle/kernel/k_handle_table.cpp @@ -13,6 +13,7 @@ ResultCode KHandleTable::Finalize() { // Get the table and clear our record of it. u16 saved_table_size = 0; { + KScopedDisableDispatch dd(kernel); KScopedSpinLock lk(m_lock); std::swap(m_table_size, saved_table_size); @@ -43,6 +44,7 @@ bool KHandleTable::Remove(Handle handle) { // Find the object and free the entry. KAutoObject* obj = nullptr; { + KScopedDisableDispatch dd(kernel); KScopedSpinLock lk(m_lock); if (this->IsValidHandle(handle)) { @@ -62,6 +64,7 @@ bool KHandleTable::Remove(Handle handle) { } ResultCode KHandleTable::Add(Handle* out_handle, KAutoObject* obj, u16 type) { + KScopedDisableDispatch dd(kernel); KScopedSpinLock lk(m_lock); // Never exceed our capacity. @@ -84,6 +87,7 @@ ResultCode KHandleTable::Add(Handle* out_handle, KAutoObject* obj, u16 type) { } ResultCode KHandleTable::Reserve(Handle* out_handle) { + KScopedDisableDispatch dd(kernel); KScopedSpinLock lk(m_lock); // Never exceed our capacity. @@ -94,6 +98,7 @@ ResultCode KHandleTable::Reserve(Handle* out_handle) { } void KHandleTable::Unreserve(Handle handle) { + KScopedDisableDispatch dd(kernel); KScopedSpinLock lk(m_lock); // Unpack the handle. @@ -112,6 +117,7 @@ void KHandleTable::Unreserve(Handle handle) { } void KHandleTable::Register(Handle handle, KAutoObject* obj, u16 type) { + KScopedDisableDispatch dd(kernel); KScopedSpinLock lk(m_lock); // Unpack the handle. diff --git a/src/core/hle/kernel/k_handle_table.h b/src/core/hle/kernel/k_handle_table.h index 95ec905ae..4b114ec2f 100644 --- a/src/core/hle/kernel/k_handle_table.h +++ b/src/core/hle/kernel/k_handle_table.h @@ -68,6 +68,7 @@ public: template <typename T = KAutoObject> KScopedAutoObject<T> GetObjectWithoutPseudoHandle(Handle handle) const { // Lock and look up in table. + KScopedDisableDispatch dd(kernel); KScopedSpinLock lk(m_lock); if constexpr (std::is_same_v<T, KAutoObject>) { @@ -122,6 +123,7 @@ public: size_t num_opened; { // Lock the table. + KScopedDisableDispatch dd(kernel); KScopedSpinLock lk(m_lock); for (num_opened = 0; num_opened < num_handles; num_opened++) { // Get the current handle. |