public void DowngradeFromWriterLock(TestLockCookie tlc, int expectedFailureHResult = 0)
{
Assert.NotNull(tlc);
PerformLockAction(
expectedFailureHResult,
false /* isBlockingOperation */,
() => _rwl.DowngradeFromWriterLock(ref tlc._lockCookie),
() =>
{
Assert.Equal(Environment.CurrentManagedThreadId, _writerThreadID);
Assert.NotEqual(0, _writerLevel);
if (tlc._readerLevel == 0)
{
Assert.True(_writerLevel > tlc._writerLevel);
_writerLevel = tlc._writerLevel;
if (_writerLevel == 0)
{
_writerThreadID = InvalidThreadID;
}
}
else
{
_writerLevel = 0;
_writerThreadID = InvalidThreadID;
Assert.True(ThreadReaderLevel == 0);
ThreadReaderLevel = tlc._readerLevel;
}
});
}