General: Fix Stop function
This commit is contained in:
		| @@ -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,10 +56,12 @@ void Thread::Stop() { | ||||
|         Signal(); | ||||
|         kernel.GlobalHandleTable().Close(global_handle); | ||||
|  | ||||
|         owner_process->UnregisterThread(this); | ||||
|         if (owner_process) { | ||||
|             owner_process->UnregisterThread(this); | ||||
|  | ||||
|         // Mark the TLS slot in the thread's page as free. | ||||
|         owner_process->FreeTLSRegion(tls_address); | ||||
|             // 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; | ||||
|  | ||||
|             was_active = true; | ||||
|             emit DebugModeEntered(); | ||||
|             if (!stop_run) { | ||||
|                 was_active = true; | ||||
|                 emit DebugModeEntered(); | ||||
|             } | ||||
|         } else if (exec_step) { | ||||
|             UNIMPLEMENTED(); | ||||
|         } else { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user