Line 1:
Line 1:
−
[[Category:Kernel objects]]
+
[[Category:Kernel synchronization objects]]
class [[KMutex]] extends [[KSynchronizationObject]];
class [[KMutex]] extends [[KSynchronizationObject]];
Line 20:
Line 20:
| 0x8
| 0x8
| u32
| u32
−
| Count of KThreads that sync with this object - number of nodes in the linked list below
+
| Node count for threads
|-
|-
| 0xC
| 0xC
−
| KLinkedListNode*
+
| [[KLinkedListNode]]*
−
| Pointer to first KLinkedListNode in node list of KThreads that sync with this object
+
| Pointer to first KLinkedListNode in the list of threads that sync with this object
|-
|-
| 0x10
| 0x10
−
| KLinkedListNode*
+
| [[KLinkedListNode]]*
−
| Pointer to last KLinkedListNode in node list of KThreads that sync with this object
+
| Pointer to last KLinkedListNode in the list of threads that sync with this object
|-
|-
| 0x14
| 0x14
−
| ?
+
| KMutexLinkedListNode
−
| ?
+
| Previous and next mutexes
−
|-
−
| 0x18
−
| ?
−
| ?
|-
|-
| 0x1C
| 0x1C
| u32
| u32
−
| 1 if locked, 0 if unlocked
+
| Threads using this mutex
|-
|-
| 0x20
| 0x20
−
| KThread *
+
| [[KThread]] *
| Thread that has the KMutex locked
| Thread that has the KMutex locked
|-
|-
| 0x24
| 0x24
| u32
| u32
−
| Unknown 0x3F ?maybe priority?
+
| Priority
|-
|-
| 0x28
| 0x28
−
| KProcess*
+
| [[KProcess]]*
| Owner
| Owner
|-
|-
|}
|}
−
KMutex + 0x20 is initialized to 0 if initialLocked is false when calling CreateMutex. If initialLocked is true, the locking thread is set to the current thread.
+
With the following declarations: <code>struct KMutexLinkedList { KMutex *first, *last; };</code> and <code>struct KMutexLinkedListNode { KMutex *prev, *next; };</code>.