forked from eden-emu/eden
		
	kernel: use simple mutex for object list container
This commit is contained in:
		
							parent
							
								
									91290b9be4
								
							
						
					
					
						commit
						e3491a9ee8
					
				
					 3 changed files with 10 additions and 31 deletions
				
			
		|  | @ -8,19 +8,22 @@ | ||||||
| namespace Kernel { | namespace Kernel { | ||||||
| 
 | 
 | ||||||
| void KAutoObjectWithListContainer::Register(KAutoObjectWithList* obj) { | void KAutoObjectWithListContainer::Register(KAutoObjectWithList* obj) { | ||||||
|     KScopedLightLock lk(m_lock); |     // KScopedInterruptDisable di;
 | ||||||
|  |     KScopedSpinLock lk(m_lock); | ||||||
| 
 | 
 | ||||||
|     m_object_list.insert_unique(*obj); |     m_object_list.insert_unique(*obj); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void KAutoObjectWithListContainer::Unregister(KAutoObjectWithList* obj) { | void KAutoObjectWithListContainer::Unregister(KAutoObjectWithList* obj) { | ||||||
|     KScopedLightLock lk(m_lock); |     // KScopedInterruptDisable di;
 | ||||||
|  |     KScopedSpinLock lk(m_lock); | ||||||
| 
 | 
 | ||||||
|     m_object_list.erase(*obj); |     m_object_list.erase(*obj); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| size_t KAutoObjectWithListContainer::GetOwnedCount(KProcess* owner) { | size_t KAutoObjectWithListContainer::GetOwnedCount(KProcess* owner) { | ||||||
|     KScopedLightLock lk(m_lock); |     // KScopedInterruptDisable di;
 | ||||||
|  |     KScopedSpinLock lk(m_lock); | ||||||
| 
 | 
 | ||||||
|     return std::count_if(m_object_list.begin(), m_object_list.end(), |     return std::count_if(m_object_list.begin(), m_object_list.end(), | ||||||
|                          [&](const auto& obj) { return obj.GetOwner() == owner; }); |                          [&](const auto& obj) { return obj.GetOwner() == owner; }); | ||||||
|  |  | ||||||
|  | @ -7,7 +7,7 @@ | ||||||
| 
 | 
 | ||||||
| #include "common/common_funcs.h" | #include "common/common_funcs.h" | ||||||
| #include "core/hle/kernel/k_auto_object.h" | #include "core/hle/kernel/k_auto_object.h" | ||||||
| #include "core/hle/kernel/k_light_lock.h" | #include "core/hle/kernel/k_spin_lock.h" | ||||||
| 
 | 
 | ||||||
| namespace Kernel { | namespace Kernel { | ||||||
| 
 | 
 | ||||||
|  | @ -21,32 +21,7 @@ public: | ||||||
| 
 | 
 | ||||||
|     using ListType = boost::intrusive::rbtree<KAutoObjectWithList>; |     using ListType = boost::intrusive::rbtree<KAutoObjectWithList>; | ||||||
| 
 | 
 | ||||||
|     class ListAccessor : public KScopedLightLock { |     KAutoObjectWithListContainer(KernelCore& kernel) : m_lock(), m_object_list() {} | ||||||
|     public: |  | ||||||
|         explicit ListAccessor(KAutoObjectWithListContainer* container) |  | ||||||
|             : KScopedLightLock(container->m_lock), m_list(container->m_object_list) {} |  | ||||||
|         explicit ListAccessor(KAutoObjectWithListContainer& container) |  | ||||||
|             : KScopedLightLock(container.m_lock), m_list(container.m_object_list) {} |  | ||||||
| 
 |  | ||||||
|         typename ListType::iterator begin() const { |  | ||||||
|             return m_list.begin(); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         typename ListType::iterator end() const { |  | ||||||
|             return m_list.end(); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         typename ListType::iterator find(typename ListType::const_reference ref) const { |  | ||||||
|             return m_list.find(ref); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|     private: |  | ||||||
|         ListType& m_list; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     friend class ListAccessor; |  | ||||||
| 
 |  | ||||||
|     KAutoObjectWithListContainer(KernelCore& kernel) : m_lock(kernel), m_object_list() {} |  | ||||||
| 
 | 
 | ||||||
|     void Initialize() {} |     void Initialize() {} | ||||||
|     void Finalize() {} |     void Finalize() {} | ||||||
|  | @ -56,7 +31,7 @@ public: | ||||||
|     size_t GetOwnedCount(KProcess* owner); |     size_t GetOwnedCount(KProcess* owner); | ||||||
| 
 | 
 | ||||||
| private: | private: | ||||||
|     KLightLock m_lock; |     KSpinLock m_lock; | ||||||
|     ListType m_object_list; |     ListType m_object_list; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -5,6 +5,7 @@ | ||||||
| 
 | 
 | ||||||
| #include <optional> | #include <optional> | ||||||
| 
 | 
 | ||||||
|  | #include "core/hle/kernel/k_light_lock.h" | ||||||
| #include "core/hle/kernel/k_page_group.h" | #include "core/hle/kernel/k_page_group.h" | ||||||
| #include "core/hle/kernel/slab_helpers.h" | #include "core/hle/kernel/slab_helpers.h" | ||||||
| #include "core/hle/kernel/svc_types.h" | #include "core/hle/kernel/svc_types.h" | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Liam
						Liam