[+] FALLBACK_WAKEONADDRESS_SUPPORTS_NONEXACT_MATCHING
[+] ThreadingConfig::bPreferEmulatedWakeOnAddress
This commit is contained in:
parent
c306c12763
commit
ceb5b2961e
@ -334,6 +334,7 @@ namespace Aurora
|
||||
bool bPreferNt51XpCondvarsOver8 { false };
|
||||
bool bPreferNtCondvarModernWinSpin { false };
|
||||
bool bPreferNtCondvarOlderWinSpin { true };
|
||||
bool bPreferEmulatedWakeOnAddress { false };
|
||||
};
|
||||
|
||||
struct RuntimeStartInfo
|
||||
|
@ -16,6 +16,7 @@
|
||||
#include <Time/Time.hpp>
|
||||
|
||||
#define HACK_NO_INVALID_ACCESS_LEAK_SHARED_REF_ON_DESTROYED_THREAD
|
||||
//#define FALLBACK_WAKEONADDRESS_SUPPORTS_NONEXACT_MATCHING
|
||||
|
||||
namespace Aurora::Threading
|
||||
{
|
||||
@ -183,7 +184,7 @@ namespace Aurora::Threading
|
||||
|
||||
bool WaitEntry::TryWakeNoLockNoReallyNoLock(const void *pAddress)
|
||||
{
|
||||
#if 0
|
||||
#if defined(FALLBACK_WAKEONADDRESS_SUPPORTS_NONEXACT_MATCHING)
|
||||
if (AuReinterpretCast<const char *>(this->pAddress) > AuReinterpretCast<const char *>(pAddress) ||
|
||||
AuReinterpretCast<const char *>(this->pAddress) + this->uSize <= AuReinterpretCast<const char *>(pAddress))
|
||||
{
|
||||
@ -203,7 +204,7 @@ namespace Aurora::Threading
|
||||
|
||||
bool WaitEntry::TryWakeNoLock(const void *pAddress)
|
||||
{
|
||||
#if 0
|
||||
#if defined(FALLBACK_WAKEONADDRESS_SUPPORTS_NONEXACT_MATCHING)
|
||||
if (AuReinterpretCast<const char *>(this->pAddress) > AuReinterpretCast<const char *>(pAddress) ||
|
||||
AuReinterpretCast<const char *>(this->pAddress) + this->uSize <= AuReinterpretCast<const char *>(pAddress))
|
||||
{
|
||||
@ -350,17 +351,32 @@ namespace Aurora::Threading
|
||||
|
||||
WaitEntry *ProcessWaitContainer::WaitBufferFrom(void *pAddress, AuUInt8 uSize)
|
||||
{
|
||||
return this->list[AuHashCode(pAddress) % AuArraySize(this->list)].WaitBufferFrom(pAddress, uSize);
|
||||
#if defined(FALLBACK_WAKEONADDRESS_SUPPORTS_NONEXACT_MATCHING)
|
||||
auto pAddressIDC = (void *)(AuUInt(pAddress) & ~(8 - 1));
|
||||
#else
|
||||
auto pAddressIDC = pAddress;
|
||||
#endif
|
||||
return this->list[AuHashCode(pAddressIDC) % AuArraySize(this->list)].WaitBufferFrom(pAddress, uSize);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
bool ProcessWaitContainer::IterateWake(void *pAddress, T callback)
|
||||
{
|
||||
return this->list[AuHashCode(pAddress) % AuArraySize(this->list)].IterateWake(callback);
|
||||
#if defined(FALLBACK_WAKEONADDRESS_SUPPORTS_NONEXACT_MATCHING)
|
||||
auto pAddressIDC = (void *)(AuUInt(pAddress) & ~(8 - 1));
|
||||
#else
|
||||
auto pAddressIDC = pAddress;
|
||||
#endif
|
||||
return this->list[AuHashCode(pAddressIDC) % AuArraySize(this->list)].IterateWake(callback);
|
||||
}
|
||||
|
||||
AUKN_SYM bool IsWaitOnRecommended()
|
||||
{
|
||||
if (gRuntimeConfig.threadingConfig.bPreferEmulatedWakeOnAddress)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
#if defined(AURORA_IS_MODERNNT_DERIVED)
|
||||
return pWaitOnAddress &&
|
||||
AuSwInfo::IsWindows8Point1OrGreater();
|
||||
|
Loading…
Reference in New Issue
Block a user