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

◆ ThreadTimer()

void System.Transactions.TransactionTable.ThreadTimer ( object state)
inlineprivate

Definition at line 146 of file TransactionTable.cs.

147 {
148 if (!_timerEnabled)
149 {
150 return;
151 }
152 _ticks++;
153 _lastTimerTime = DateTime.UtcNow.Ticks;
154 BucketSet bucketSet = null;
155 BucketSet bucketSet2 = _headBucketSet;
156 WeakReference weakReference = null;
157 BucketSet bucketSet3 = null;
158 weakReference = (WeakReference)bucketSet2.nextSetWeak;
159 if (weakReference != null)
160 {
161 bucketSet3 = (BucketSet)weakReference.Target;
162 }
163 if (bucketSet3 == null)
164 {
166 try
167 {
168 weakReference = (WeakReference)bucketSet2.nextSetWeak;
169 if (weakReference != null)
170 {
171 bucketSet3 = (BucketSet)weakReference.Target;
172 }
173 if (bucketSet3 == null)
174 {
175 if (!_timer.Change(-1, -1))
176 {
177 throw TransactionException.CreateInvalidOperationException(TraceSourceType.TraceSourceLtm, System.SR.UnexpectedTimerFailure, null);
178 }
179 _timerEnabled = false;
180 return;
181 }
182 }
183 finally
184 {
186 }
187 }
188 WeakReference weakReference2;
189 while (true)
190 {
191 weakReference = (WeakReference)bucketSet2.nextSetWeak;
192 if (weakReference == null)
193 {
194 return;
195 }
196 bucketSet3 = (BucketSet)weakReference.Target;
197 if (bucketSet3 == null)
198 {
199 return;
200 }
201 bucketSet = bucketSet2;
202 bucketSet2 = bucketSet3;
203 if (bucketSet2.AbsoluteTimeout <= _ticks)
204 {
205 weakReference2 = (WeakReference)Interlocked.CompareExchange(ref bucketSet.nextSetWeak, null, weakReference);
206 if (weakReference2 == weakReference)
207 {
208 break;
209 }
210 bucketSet2 = bucketSet;
211 }
212 }
213 BucketSet bucketSet4 = null;
214 do
215 {
216 bucketSet4 = ((weakReference2 == null) ? null : ((BucketSet)weakReference2.Target));
217 if (bucketSet4 != null)
218 {
219 bucketSet4.TimeoutTransactions();
220 weakReference2 = (WeakReference)bucketSet4.nextSetWeak;
221 }
222 }
223 while (bucketSet4 != null);
224 }
static string UnexpectedTimerFailure
Definition SR.cs:74
Definition SR.cs:7
static int CompareExchange(ref int location1, int value, int comparand)
bool Change(int dueTime, int period)
Definition Timer.cs:131
readonly CheapUnfairReaderWriterLock _rwLock

References System.Transactions.TransactionTable._headBucketSet, System.Transactions.TransactionTable._lastTimerTime, System.Transactions.TransactionTable._rwLock, System.Transactions.TransactionTable._ticks, System.Transactions.TransactionTable._timer, System.Transactions.TransactionTable._timerEnabled, System.Transactions.BucketSet.AbsoluteTimeout, System.Threading.Timer.Change(), System.Threading.Interlocked.CompareExchange(), System.Transactions.TransactionException.CreateInvalidOperationException(), System.Transactions.CheapUnfairReaderWriterLock.EnterWriteLock(), System.Transactions.CheapUnfairReaderWriterLock.ExitWriteLock(), System.Transactions.BucketSet.nextSetWeak, System.WeakReference< T >.Target, System.Transactions.BucketSet.TimeoutTransactions(), System.SR.UnexpectedTimerFailure, and System.DateTime.UtcNow.

Referenced by System.Transactions.TransactionTable.TransactionTable().