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

◆ UpgradeToWriterLock() [1/2]

LockCookie System.Threading.ReaderWriterLock.UpgradeToWriterLock ( int millisecondsTimeout)
inline

Definition at line 568 of file ReaderWriterLock.cs.

569 {
570 if (millisecondsTimeout < -1)
571 {
572 throw GetInvalidTimeoutException("millisecondsTimeout");
573 }
574 LockCookie lockCookie = default(LockCookie);
576 if (_writerID == num)
577 {
578 lockCookie._flags = LockCookieFlags.Upgrade | LockCookieFlags.OwnedWriter;
581 return lockCookie;
582 }
583 ThreadLocalLockEntry current = ThreadLocalLockEntry.GetCurrent(_lockID);
584 if (current == null)
585 {
586 lockCookie._flags = LockCookieFlags.Upgrade | LockCookieFlags.OwnedNone;
587 }
588 else
589 {
590 lockCookie._flags = LockCookieFlags.Upgrade | LockCookieFlags.OwnedReader;
591 lockCookie._readerLevel = current._readerLevel;
592 int num2 = Interlocked.CompareExchange(ref _state, 4096, 1);
593 if (num2 == 1)
594 {
596 _writerID = num;
597 _writerLevel = 1;
599 return lockCookie;
600 }
603 }
604 bool flag = false;
605 try
606 {
608 flag = true;
609 return lockCookie;
610 }
611 finally
612 {
613 if (!flag)
614 {
615 LockCookieFlags flags = lockCookie._flags;
616 lockCookie._flags = LockCookieFlags.Invalid;
617 RecoverLock(ref lockCookie, flags & LockCookieFlags.OwnedReader);
618 }
619 }
620 }
void RecoverLock(ref LockCookie lockCookie, LockCookieFlags flags)
void AcquireWriterLock(int millisecondsTimeout)
static ArgumentOutOfRangeException GetInvalidTimeoutException(string parameterName)

References System.Threading.ReaderWriterLock._lockID, System.Threading.ReaderWriterLock.ThreadLocalLockEntry._readerLevel, System.Threading.ReaderWriterLock._state, System.Threading.ReaderWriterLock._writerID, System.Threading.ReaderWriterLock._writerLevel, System.Threading.ReaderWriterLock._writerSeqNum, System.Threading.ReaderWriterLock.AcquireWriterLock(), System.Threading.Interlocked.CompareExchange(), System.Runtime.Serialization.Dictionary, System.Threading.ReaderWriterLock.ThreadLocalLockEntry.GetCurrent(), System.Threading.ReaderWriterLock.GetCurrentThreadID(), System.Threading.ReaderWriterLock.GetInvalidTimeoutException(), System.millisecondsTimeout, System.Threading.ReaderWriterLock.RecoverLock(), and System.Threading.ReaderWriterLock.ReleaseReaderLock().

Referenced by System.Threading.ReaderWriterLock.UpgradeToWriterLock().