public TestLockCookie UpgradeToWriterLock(int expectedFailureHResult = 0)
{
TestLockCookie tlc = null;
LockCookie lockCookie = default(LockCookie);
PerformLockAction(
expectedFailureHResult,
true /* isBlockingOperation */,
() => lockCookie = _rwl.UpgradeToWriterLock(GetTimeoutMilliseconds(expectedFailureHResult)),
() =>
{
tlc = new TestLockCookie()
{
_lockCookie = lockCookie,
_readerLevel = ThreadReaderLevel,
_writerLevel = _writerLevel
};
ThreadReaderLevel = 0;
if (_writerLevel == 0)
{
Assert.Equal(InvalidThreadID, _writerThreadID);
_writerThreadID = Environment.CurrentManagedThreadId;
++_writerSeqNum;
}
else
{
Assert.Equal(Environment.CurrentManagedThreadId, _writerThreadID);
}
++_writerLevel;
});
return tlc;
}