mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 09:22:44 +00:00 
			
		
		
		
	Kernel: Move Lockable into its own header
This commit is contained in:
		
							parent
							
								
									2c3b0baf76
								
							
						
					
					
						commit
						aea98a85d1
					
				
					 10 changed files with 44 additions and 23 deletions
				
			
		|  | @ -9,6 +9,7 @@ | ||||||
| #include <AK/StdLibExtras.h> | #include <AK/StdLibExtras.h> | ||||||
| #include <Kernel/FileSystem/FIFO.h> | #include <Kernel/FileSystem/FIFO.h> | ||||||
| #include <Kernel/FileSystem/FileDescription.h> | #include <Kernel/FileSystem/FileDescription.h> | ||||||
|  | #include <Kernel/Locking/Lockable.h> | ||||||
| #include <Kernel/Locking/Mutex.h> | #include <Kernel/Locking/Mutex.h> | ||||||
| #include <Kernel/Process.h> | #include <Kernel/Process.h> | ||||||
| #include <Kernel/Thread.h> | #include <Kernel/Thread.h> | ||||||
|  |  | ||||||
							
								
								
									
										35
									
								
								Kernel/Locking/Lockable.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								Kernel/Locking/Lockable.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,35 @@ | ||||||
|  | /*
 | ||||||
|  |  * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org> | ||||||
|  |  * | ||||||
|  |  * SPDX-License-Identifier: BSD-2-Clause | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | #pragma once | ||||||
|  | 
 | ||||||
|  | #include <Kernel/Locking/Mutex.h> | ||||||
|  | 
 | ||||||
|  | namespace Kernel { | ||||||
|  | 
 | ||||||
|  | template<typename T> | ||||||
|  | class Lockable { | ||||||
|  | public: | ||||||
|  |     Lockable() = default; | ||||||
|  |     Lockable(T&& resource) | ||||||
|  |         : m_resource(move(resource)) | ||||||
|  |     { | ||||||
|  |     } | ||||||
|  |     [[nodiscard]] Mutex& lock() { return m_lock; } | ||||||
|  |     [[nodiscard]] T& resource() { return m_resource; } | ||||||
|  | 
 | ||||||
|  |     [[nodiscard]] T lock_and_copy() | ||||||
|  |     { | ||||||
|  |         MutexLocker locker(m_lock); | ||||||
|  |         return m_resource; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  | private: | ||||||
|  |     T m_resource; | ||||||
|  |     Mutex m_lock; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | } | ||||||
|  | @ -182,28 +182,6 @@ private: | ||||||
|     bool m_locked { true }; |     bool m_locked { true }; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| template<typename T> |  | ||||||
| class Lockable { |  | ||||||
| public: |  | ||||||
|     Lockable() = default; |  | ||||||
|     Lockable(T&& resource) |  | ||||||
|         : m_resource(move(resource)) |  | ||||||
|     { |  | ||||||
|     } |  | ||||||
|     [[nodiscard]] Mutex& lock() { return m_lock; } |  | ||||||
|     [[nodiscard]] T& resource() { return m_resource; } |  | ||||||
| 
 |  | ||||||
|     [[nodiscard]] T lock_and_copy() |  | ||||||
|     { |  | ||||||
|         MutexLocker locker(m_lock); |  | ||||||
|         return m_resource; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
| private: |  | ||||||
|     T m_resource; |  | ||||||
|     Mutex m_lock; |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| class ScopedLockRelease { | class ScopedLockRelease { | ||||||
|     AK_MAKE_NONCOPYABLE(ScopedLockRelease); |     AK_MAKE_NONCOPYABLE(ScopedLockRelease); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -10,7 +10,7 @@ | ||||||
| #include <AK/SinglyLinkedListWithCount.h> | #include <AK/SinglyLinkedListWithCount.h> | ||||||
| #include <Kernel/DoubleBuffer.h> | #include <Kernel/DoubleBuffer.h> | ||||||
| #include <Kernel/KBuffer.h> | #include <Kernel/KBuffer.h> | ||||||
| #include <Kernel/Locking/Mutex.h> | #include <Kernel/Locking/Lockable.h> | ||||||
| #include <Kernel/Net/IPv4.h> | #include <Kernel/Net/IPv4.h> | ||||||
| #include <Kernel/Net/IPv4SocketTuple.h> | #include <Kernel/Net/IPv4SocketTuple.h> | ||||||
| #include <Kernel/Net/Socket.h> | #include <Kernel/Net/Socket.h> | ||||||
|  |  | ||||||
|  | @ -9,6 +9,8 @@ | ||||||
| #include <Kernel/Debug.h> | #include <Kernel/Debug.h> | ||||||
| #include <Kernel/FileSystem/FileDescription.h> | #include <Kernel/FileSystem/FileDescription.h> | ||||||
| #include <Kernel/FileSystem/VirtualFileSystem.h> | #include <Kernel/FileSystem/VirtualFileSystem.h> | ||||||
|  | #include <Kernel/Locking/Lockable.h> | ||||||
|  | #include <Kernel/Locking/Mutex.h> | ||||||
| #include <Kernel/Net/LocalSocket.h> | #include <Kernel/Net/LocalSocket.h> | ||||||
| #include <Kernel/Process.h> | #include <Kernel/Process.h> | ||||||
| #include <Kernel/StdLib.h> | #include <Kernel/StdLib.h> | ||||||
|  |  | ||||||
|  | @ -6,6 +6,7 @@ | ||||||
| 
 | 
 | ||||||
| #pragma once | #pragma once | ||||||
| 
 | 
 | ||||||
|  | #include <Kernel/Locking/Lockable.h> | ||||||
| #include <Kernel/Net/NetworkAdapter.h> | #include <Kernel/Net/NetworkAdapter.h> | ||||||
| #include <Kernel/Thread.h> | #include <Kernel/Thread.h> | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -9,6 +9,7 @@ | ||||||
| #include <Kernel/Debug.h> | #include <Kernel/Debug.h> | ||||||
| #include <Kernel/Devices/RandomDevice.h> | #include <Kernel/Devices/RandomDevice.h> | ||||||
| #include <Kernel/FileSystem/FileDescription.h> | #include <Kernel/FileSystem/FileDescription.h> | ||||||
|  | #include <Kernel/Locking/Lockable.h> | ||||||
| #include <Kernel/Net/EthernetFrameHeader.h> | #include <Kernel/Net/EthernetFrameHeader.h> | ||||||
| #include <Kernel/Net/IPv4.h> | #include <Kernel/Net/IPv4.h> | ||||||
| #include <Kernel/Net/NetworkAdapter.h> | #include <Kernel/Net/NetworkAdapter.h> | ||||||
|  |  | ||||||
|  | @ -6,6 +6,7 @@ | ||||||
| 
 | 
 | ||||||
| #include <AK/Singleton.h> | #include <AK/Singleton.h> | ||||||
| #include <Kernel/Devices/RandomDevice.h> | #include <Kernel/Devices/RandomDevice.h> | ||||||
|  | #include <Kernel/Locking/Mutex.h> | ||||||
| #include <Kernel/Net/NetworkAdapter.h> | #include <Kernel/Net/NetworkAdapter.h> | ||||||
| #include <Kernel/Net/Routing.h> | #include <Kernel/Net/Routing.h> | ||||||
| #include <Kernel/Net/UDP.h> | #include <Kernel/Net/UDP.h> | ||||||
|  |  | ||||||
|  | @ -7,6 +7,7 @@ | ||||||
| #pragma once | #pragma once | ||||||
| 
 | 
 | ||||||
| #include <Kernel/KResult.h> | #include <Kernel/KResult.h> | ||||||
|  | #include <Kernel/Locking/Lockable.h> | ||||||
| #include <Kernel/Net/IPv4Socket.h> | #include <Kernel/Net/IPv4Socket.h> | ||||||
| 
 | 
 | ||||||
| namespace Kernel { | namespace Kernel { | ||||||
|  |  | ||||||
|  | @ -10,6 +10,7 @@ | ||||||
| #include <AK/Assertions.h> | #include <AK/Assertions.h> | ||||||
| #include <AK/ByteBuffer.h> | #include <AK/ByteBuffer.h> | ||||||
| #include <AK/Types.h> | #include <AK/Types.h> | ||||||
|  | #include <Kernel/Locking/Lockable.h> | ||||||
| #include <Kernel/Locking/Mutex.h> | #include <Kernel/Locking/Mutex.h> | ||||||
| #include <Kernel/StdLib.h> | #include <Kernel/StdLib.h> | ||||||
| #include <LibCrypto/Cipher/AES.h> | #include <LibCrypto/Cipher/AES.h> | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Jean-Baptiste Boric
						Jean-Baptiste Boric