public void ReleaseReaderLock(int expectedFailureHResult = 0)
{
PerformLockAction(
expectedFailureHResult,
false /* isBlockingOperation */,
() => _rwl.ReleaseReaderLock(),
() =>
{
if (_writerThreadID == Environment.CurrentManagedThreadId)
{
// Write lock is already held, release a write lock instead
Assert.NotEqual(0, _writerLevel);
--_writerLevel;
if (_writerLevel == 0)
{
_writerThreadID = InvalidThreadID;
}
}
else
{
Assert.NotEqual(0, ThreadReaderLevel);
--ThreadReaderLevel;
}
});
}