General: Fix Stop function
This commit is contained in:
parent
f370de84b1
commit
e6f8bde74b
|
@ -61,6 +61,7 @@ void CoreTiming::Initialize(std::function<void(void)>&& on_thread_init_) {
|
|||
void CoreTiming::Shutdown() {
|
||||
paused = true;
|
||||
shutting_down = true;
|
||||
pause_event.Set();
|
||||
event.Set();
|
||||
timer_thread->join();
|
||||
ClearPendingEvents();
|
||||
|
|
|
@ -119,6 +119,7 @@ struct KernelCore::Impl {
|
|||
|
||||
void Initialize(KernelCore& kernel) {
|
||||
Shutdown();
|
||||
RegisterHostThread();
|
||||
|
||||
InitializePhysicalCores();
|
||||
InitializeSystemResourceLimit(kernel);
|
||||
|
@ -135,6 +136,19 @@ struct KernelCore::Impl {
|
|||
next_user_process_id = Process::ProcessIDMin;
|
||||
next_thread_id = 1;
|
||||
|
||||
for (std::size_t i = 0; i < Core::Hardware::NUM_CPU_CORES; i++) {
|
||||
if (suspend_threads[i]) {
|
||||
suspend_threads[i].reset();
|
||||
}
|
||||
}
|
||||
|
||||
for (std::size_t i = 0; i < cores.size(); i++) {
|
||||
cores[i].Shutdown();
|
||||
}
|
||||
cores.clear();
|
||||
|
||||
registered_core_threads.reset();
|
||||
|
||||
process_list.clear();
|
||||
current_process = nullptr;
|
||||
|
||||
|
@ -154,6 +168,7 @@ struct KernelCore::Impl {
|
|||
cores.clear();
|
||||
|
||||
exclusive_monitor.reset();
|
||||
host_thread_ids.clear();
|
||||
}
|
||||
|
||||
void InitializePhysicalCores() {
|
||||
|
|
|
@ -56,11 +56,13 @@ void Thread::Stop() {
|
|||
Signal();
|
||||
kernel.GlobalHandleTable().Close(global_handle);
|
||||
|
||||
if (owner_process) {
|
||||
owner_process->UnregisterThread(this);
|
||||
|
||||
// Mark the TLS slot in the thread's page as free.
|
||||
owner_process->FreeTLSRegion(tls_address);
|
||||
}
|
||||
}
|
||||
global_handle = 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -89,8 +89,10 @@ void EmuThread::run() {
|
|||
}
|
||||
running_guard = false;
|
||||
|
||||
if (!stop_run) {
|
||||
was_active = true;
|
||||
emit DebugModeEntered();
|
||||
}
|
||||
} else if (exec_step) {
|
||||
UNIMPLEMENTED();
|
||||
} else {
|
||||
|
|
Reference in New Issue