Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ Exit()

void System.Threading.AsyncMutex.Exit ( )
inline

Definition at line 115 of file AsyncMutex.cs.

116 {
117 if (Interlocked.Increment(ref _gate) < 1)
118 {
119 Contended();
120 }
121 void Contended()
122 {
123 Waiter waiter;
124 lock (SyncObj)
125 {
126 waiter = _waitersTail;
127 if (waiter == null)
128 {
129 _lockedSemaphoreFull = false;
130 }
131 else
132 {
133 if (waiter.Next == waiter)
134 {
135 _waitersTail = null;
136 }
137 else
138 {
139 waiter = waiter.Prev;
140 waiter.Next.Prev = waiter.Prev;
141 waiter.Prev.Next = waiter.Next;
142 }
143 Waiter waiter2 = waiter;
144 Waiter next = (waiter.Prev = null);
145 waiter2.Next = next;
146 }
147 }
148 if (waiter != null)
149 {
151 waiter.TrySetResult();
152 }
153 }
154 }
CancellationTokenRegistration CancellationRegistration
Definition AsyncMutex.cs:11

References System.Threading.AsyncMutex._gate, System.Threading.AsyncMutex._lockedSemaphoreFull, System.Threading.AsyncMutex._waitersTail, System.Threading.AsyncMutex.Waiter.CancellationRegistration, System.Threading.Interlocked.Increment(), System.Threading.AsyncMutex.Waiter.Next, System.Threading.AsyncMutex.Waiter.Prev, System.Threading.AsyncMutex.SyncObj, System.Threading.Tasks.TaskCompletionSource< TResult >.TrySetResult(), and System.Threading.CancellationTokenRegistration.Unregister().

Referenced by System.Net.WebSockets.ManagedWebSocket.CloseAsyncPrivate(), System.Net.WebSockets.ManagedWebSocket._003CReceiveAsyncPrivate_003Ed__63< TResult >.MoveNext(), System.Net.WebSockets.ManagedWebSocket.SendFrameFallbackAsync(), System.Net.WebSockets.ManagedWebSocket.SendFrameLockAcquiredNonCancelableAsync(), and System.Net.WebSockets.ManagedWebSocket.WaitForWriteTaskAsync().