mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-08 19:04:45 +00:00
Bug 1364624 - Switch from CRITICALSECTION to SRWLOCK. r=froydnj
--HG-- extra : rebase_source : 4acc959bb8ccc33f6d549b71bbd83b8f8d09b353
This commit is contained in:
parent
4b77101e8d
commit
b626618f7d
@ -54,8 +54,8 @@ mozilla::detail::ConditionVariableImpl::notify_all()
|
||||
void
|
||||
mozilla::detail::ConditionVariableImpl::wait(MutexImpl& lock)
|
||||
{
|
||||
CRITICAL_SECTION* cs = &lock.platformData()->criticalSection;
|
||||
bool r = SleepConditionVariableCS(&platformData()->cv_, cs, INFINITE);
|
||||
SRWLOCK* srwlock = &lock.platformData()->lock;
|
||||
bool r = SleepConditionVariableSRW(&platformData()->cv_, srwlock, INFINITE, 0);
|
||||
MOZ_RELEASE_ASSERT(r);
|
||||
}
|
||||
|
||||
@ -68,7 +68,7 @@ mozilla::detail::ConditionVariableImpl::wait_for(MutexImpl& lock,
|
||||
return CVStatus::NoTimeout;
|
||||
}
|
||||
|
||||
CRITICAL_SECTION* cs = &lock.platformData()->criticalSection;
|
||||
SRWLOCK* srwlock = &lock.platformData()->lock;
|
||||
|
||||
// Note that DWORD is unsigned, so we have to be careful to clamp at 0. If
|
||||
// rel_time is Forever, then ToMilliseconds is +inf, which evaluates as
|
||||
@ -89,7 +89,7 @@ mozilla::detail::ConditionVariableImpl::wait_for(MutexImpl& lock,
|
||||
}
|
||||
}
|
||||
|
||||
BOOL r = SleepConditionVariableCS(&platformData()->cv_, cs, msec);
|
||||
BOOL r = SleepConditionVariableSRW(&platformData()->cv_, srwlock, msec, 0);
|
||||
if (r)
|
||||
return CVStatus::NoTimeout;
|
||||
MOZ_RELEASE_ASSERT(GetLastError() == ERROR_TIMEOUT);
|
||||
|
@ -13,7 +13,7 @@
|
||||
|
||||
struct mozilla::detail::MutexImpl::PlatformData
|
||||
{
|
||||
CRITICAL_SECTION criticalSection;
|
||||
SRWLOCK lock;
|
||||
};
|
||||
|
||||
#endif // MutexPlatformData_windows_h
|
||||
|
@ -14,38 +14,23 @@
|
||||
|
||||
mozilla::detail::MutexImpl::MutexImpl()
|
||||
{
|
||||
// This number was adopted from NSPR.
|
||||
const static DWORD LockSpinCount = 1500;
|
||||
|
||||
#if defined(RELEASE_OR_BETA)
|
||||
// Vista and later automatically allocate and subsequently leak a debug info
|
||||
// object for each critical section that we allocate unless we tell the
|
||||
// system not to do that.
|
||||
DWORD flags = CRITICAL_SECTION_NO_DEBUG_INFO;
|
||||
#else
|
||||
DWORD flags = 0;
|
||||
#endif // defined(RELEASE_OR_BETA)
|
||||
|
||||
BOOL r = InitializeCriticalSectionEx(&platformData()->criticalSection,
|
||||
LockSpinCount, flags);
|
||||
MOZ_RELEASE_ASSERT(r);
|
||||
InitializeSRWLock(&platformData()->lock);
|
||||
}
|
||||
|
||||
mozilla::detail::MutexImpl::~MutexImpl()
|
||||
{
|
||||
DeleteCriticalSection(&platformData()->criticalSection);
|
||||
}
|
||||
|
||||
void
|
||||
mozilla::detail::MutexImpl::lock()
|
||||
{
|
||||
EnterCriticalSection(&platformData()->criticalSection);
|
||||
AcquireSRWLockExclusive(&platformData()->lock);
|
||||
}
|
||||
|
||||
void
|
||||
mozilla::detail::MutexImpl::unlock()
|
||||
{
|
||||
LeaveCriticalSection(&platformData()->criticalSection);
|
||||
ReleaseSRWLockExclusive(&platformData()->lock);
|
||||
}
|
||||
|
||||
mozilla::detail::MutexImpl::PlatformData*
|
||||
|
Loading…
Reference in New Issue
Block a user