mirror of
https://github.com/RPCS3/rpcs3.git
synced 2024-11-22 02:32:36 +01:00
Restore thread counter (world may be not ready yet)
Remove dumb 1300ms timeout.
This commit is contained in:
parent
cd40bc8c61
commit
7eebe06931
@ -1722,6 +1722,8 @@ DECLARE(thread_ctrl::g_native_core_layout) { native_core_arrangement::undefined
|
||||
|
||||
void thread_base::start(native_entry entry)
|
||||
{
|
||||
thread_ctrl::g_thread_count++;
|
||||
|
||||
#ifdef _WIN32
|
||||
m_thread = ::_beginthreadex(nullptr, 0, entry, this, CREATE_SUSPENDED, nullptr);
|
||||
verify("thread_ctrl::start" HERE), m_thread, ::ResumeThread(reinterpret_cast<HANDLE>(+m_thread)) != -1;
|
||||
@ -1863,6 +1865,7 @@ void thread_base::finalize() noexcept
|
||||
{
|
||||
g_tls_log_prefix = []() -> std::string { return {}; };
|
||||
thread_ctrl::g_tls_this_thread = nullptr;
|
||||
thread_ctrl::g_thread_count--;
|
||||
}
|
||||
|
||||
void thread_ctrl::_wait_for(u64 usec, bool alert /* true */)
|
||||
|
@ -192,6 +192,9 @@ class thread_ctrl final
|
||||
// Target cpu core layout
|
||||
static atomic_t<native_core_arrangement> g_native_core_layout;
|
||||
|
||||
// Global thread counter
|
||||
static inline atomic_t<u64> g_thread_count = 0;
|
||||
|
||||
// Internal waiting function, may throw. Infinite value is -1.
|
||||
static void _wait_for(u64 usec, bool alert);
|
||||
|
||||
@ -275,6 +278,11 @@ public:
|
||||
return g_tls_this_thread;
|
||||
}
|
||||
|
||||
static u64 get_count()
|
||||
{
|
||||
return g_thread_count.load();
|
||||
}
|
||||
|
||||
// Detect layout
|
||||
static void detect_cpu_layout();
|
||||
|
||||
|
@ -630,9 +630,6 @@ void cpu_thread::stop_all() noexcept
|
||||
std::this_thread::sleep_for(10ms);
|
||||
}
|
||||
|
||||
// Workaround for remaining threads (TODO)
|
||||
std::this_thread::sleep_for(1300ms);
|
||||
|
||||
sys_log.notice("All CPU threads have been stopped.");
|
||||
}
|
||||
|
||||
|
@ -1600,6 +1600,14 @@ void Emulator::Stop(bool restart)
|
||||
|
||||
cpu_thread::stop_all();
|
||||
g_fxo->reset();
|
||||
|
||||
while (thread_ctrl::get_count())
|
||||
{
|
||||
std::this_thread::sleep_for(10ms);
|
||||
}
|
||||
|
||||
sys_log.notice("All threads have been stopped.");
|
||||
|
||||
lv2_obj::cleanup();
|
||||
idm::clear();
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user