private void EnterLock(ref int syncStatus)
{
if (syncStatus == SyncStatus.Unlocked)
{
lock (this)
{
if (syncStatus != SyncStatus.Aborted)
{
syncStatus = SyncStatus.Locking;
while (true)
{
if (!m_LockHeld)
{
syncStatus = SyncStatus.LockOwner;
m_LockHeld = true;
return;
}
Monitor.Wait(this);
if (syncStatus == SyncStatus.Aborted)
{
Monitor.Pulse(this); // This is to ensure that a Pulse meant to let someone take the lock isn't lost.
return;
}
}
}
}
}
}