[*] Begin work around for use after thread-local free; WaitOnAddress emulation
This commit is contained in:
parent
2d06725b8b
commit
e2accb900b
@ -13,9 +13,15 @@
|
||||
#endif
|
||||
#include <Time/Time.hpp>
|
||||
|
||||
#define HACK_NO_INVALID_ACCESS_LEAK_SHARED_REF_ON_DESTROYED_THREAD
|
||||
|
||||
namespace Aurora::Threading
|
||||
{
|
||||
#if defined(HACK_NO_INVALID_ACCESS_LEAK_SHARED_REF_ON_DESTROYED_THREAD)
|
||||
static thread_local AuSPtr<WaitEntry> tlsWaitEntry = AuMakeSharedPanic<WaitEntry>();
|
||||
#else
|
||||
static thread_local WaitEntry tlsWaitEntry;
|
||||
#endif
|
||||
|
||||
#if defined(AURORA_IS_LINUX_DERIVED)
|
||||
static int futex_wait(uint32_t *addr, uint32_t expected, const struct timespec *timeout)
|
||||
@ -291,7 +297,12 @@ namespace Aurora::Threading
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(HACK_NO_INVALID_ACCESS_LEAK_SHARED_REF_ON_DESTROYED_THREAD)
|
||||
auto pReturn = tlsWaitEntry.get();
|
||||
#else
|
||||
auto pReturn = &tlsWaitEntry;
|
||||
#endif
|
||||
|
||||
pReturn->bReleaseOnWake = true;
|
||||
|
||||
pReturn->pAddress = pAddress;
|
||||
@ -612,10 +623,19 @@ namespace Aurora::Threading
|
||||
state.qwNanosecondsAbs = qwNanosecondsAbs.value();
|
||||
}
|
||||
|
||||
#if defined(HACK_NO_INVALID_ACCESS_LEAK_SHARED_REF_ON_DESTROYED_THREAD)
|
||||
auto pTempHoldMe = tlsWaitEntry;
|
||||
#endif
|
||||
|
||||
auto bResult = pWaitEntry->SleepOn(state);
|
||||
|
||||
#if defined(WOA_USE_DEFERRED_REL)
|
||||
pWaitEntry->Release();
|
||||
#endif
|
||||
|
||||
#if defined(HACK_NO_INVALID_ACCESS_LEAK_SHARED_REF_ON_DESTROYED_THREAD)
|
||||
pTempHoldMe.reset();
|
||||
#endif
|
||||
return bResult;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user