private static void ReleaseWriterLock()
{
int threadId = Thread.CurrentThread.ManagedThreadId;
if ((_threadLocking.WriterLocksPerThreadId[threadId] == 1) &&
(_threadLocking.LockCookiesPerThreadId.ContainsKey(threadId)))
{
LockCookie lockCookie = _threadLocking.LockCookiesPerThreadId[threadId];
lock(_threadLocking)
{
_threadLocking.LockCookiesPerThreadId.Remove(threadId);
}
_readerWriterLock.DowngradeFromWriterLock(ref lockCookie);
}
else
{
_readerWriterLock.ReleaseWriterLock();
}
lock (_threadLocking)
{
_threadLocking.WriterLocksPerThreadId[threadId] = _threadLocking.WriterLocksPerThreadId[threadId] - 1;
if (_threadLocking.WriterLocksPerThreadId[threadId] == 0)
{
_threadLocking.WriterLocksPerThreadId.Remove(threadId);
}
}
}