Utilities/Thread.cpp: Fix threads memory leak

This commit is contained in:
Eladash 2023-10-24 11:56:09 +03:00 committed by Elad Ashkenazi
parent eb407e3b5c
commit f9d213650c

View File

@ -2223,13 +2223,11 @@ thread_base::native_entry thread_base::finalize(u64 _self) noexcept
g_tls_wait_fail = 0; g_tls_wait_fail = 0;
g_tls_access_violation_recovered = false; g_tls_access_violation_recovered = false;
const auto fake_self = reinterpret_cast<thread_base*>(_self);
g_tls_log_prefix = []() -> std::string { return {}; }; g_tls_log_prefix = []() -> std::string { return {}; };
thread_ctrl::g_tls_this_thread = fake_self;
if (!_self) if (_self == umax)
{ {
thread_ctrl::g_tls_this_thread = nullptr;
return nullptr; return nullptr;
} }
@ -2463,8 +2461,7 @@ thread_base::~thread_base()
// Cleanup abandoned tasks: initialize default results and signal // Cleanup abandoned tasks: initialize default results and signal
this->exec(); this->exec();
// Only cleanup on errored status // Cleanup
if ((m_sync & 3) == 2)
{ {
#ifdef _WIN32 #ifdef _WIN32
const HANDLE handle0 = reinterpret_cast<HANDLE>(m_thread.load()); const HANDLE handle0 = reinterpret_cast<HANDLE>(m_thread.load());
@ -2650,13 +2647,13 @@ void thread_base::exec()
u64 _self = _this->finalize(thread_state::errored); u64 _self = _this->finalize(thread_state::errored);
if (!_self) if (_self == umax)
{ {
// Unused, detached thread support remnant // Unused, detached thread support remnant
delete _this; delete _this;
} }
thread_base::finalize(0); thread_base::finalize(umax);
#ifdef _WIN32 #ifdef _WIN32
_endthreadex(0); _endthreadex(0);