mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 18:07:34 +00:00
AK+Kernel: Make IntrusiveList capable of holding non-raw pointers
This should allow creating intrusive lists that have smart pointers, while remaining free (compared to the impl before this commit) when holding raw pointers :^) As a sidenote, this also adds a `RawPtr<T>` type, which is just equivalent to `T*`. Note that this does not actually use such functionality, but is only expected to pave the way for #6369, to replace NonnullRefPtrVector<T> with intrusive lists. As it is with zero-cost things, this makes the interface a bit less nice by requiring the type name of what an `IntrusiveListNode` holds (and optionally its container, if not RawPtr), and also requiring the type of the container (normally `RawPtr`) on the `IntrusiveList` instance.
This commit is contained in:
parent
fb814ee720
commit
e4412f1f59
11 changed files with 143 additions and 80 deletions
|
@ -88,7 +88,7 @@ class Thread
|
|||
friend class Process;
|
||||
friend class ProtectedProcessBase;
|
||||
friend class Scheduler;
|
||||
friend class ThreadReadyQueue;
|
||||
friend struct ThreadReadyQueue;
|
||||
|
||||
static SpinLock<u8> g_tid_map_lock;
|
||||
static HashMap<ThreadID, Thread*>* g_tid_map;
|
||||
|
@ -1129,7 +1129,7 @@ public:
|
|||
private:
|
||||
Thread(NonnullRefPtr<Process>, NonnullOwnPtr<Region> kernel_stack_region);
|
||||
|
||||
IntrusiveListNode m_process_thread_list_node;
|
||||
IntrusiveListNode<Thread> m_process_thread_list_node;
|
||||
int m_runnable_priority { -1 };
|
||||
|
||||
friend class WaitQueue;
|
||||
|
@ -1202,7 +1202,7 @@ private:
|
|||
TSS m_tss {};
|
||||
TrapFrame* m_current_trap { nullptr };
|
||||
u32 m_saved_critical { 1 };
|
||||
IntrusiveListNode m_ready_queue_node;
|
||||
IntrusiveListNode<Thread> m_ready_queue_node;
|
||||
Atomic<u32> m_cpu { 0 };
|
||||
u32 m_cpu_affinity { THREAD_AFFINITY_DEFAULT };
|
||||
u32 m_ticks_left { 0 };
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue