diff options
author | Lioncash <mathew1800@gmail.com> | 2019-04-09 17:03:04 -0400 |
---|---|---|
committer | Lioncash <mathew1800@gmail.com> | 2019-04-11 22:11:41 -0400 |
commit | 612e1388df3bed64081488f2a99cce522c80c76d (patch) | |
tree | 2d2782d0df46e9458ec2a2728f5cd66f27963ea9 /src/core/core.cpp | |
parent | 32a6ceb4e576a88cf7193bf6d0bfb6d4fa1570f6 (diff) |
core/core: Move process execution start to System's Load()
This gives us significantly more control over where in the
initialization process we start execution of the main process.
Previously we were running the main process before the CPU or GPU
threads were initialized (not good). This amends execution to start
after all of our threads are properly set up.
Diffstat (limited to 'src/core/core.cpp')
-rw-r--r-- | src/core/core.cpp | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/src/core/core.cpp b/src/core/core.cpp index 265ac2835c..175a5f2ea5 100644 --- a/src/core/core.cpp +++ b/src/core/core.cpp @@ -168,7 +168,7 @@ struct System::Impl { } auto main_process = Kernel::Process::Create(system, "main"); - const Loader::ResultStatus load_result{app_loader->Load(*main_process)}; + const auto [load_result, load_parameters] = app_loader->Load(*main_process); if (load_result != Loader::ResultStatus::Success) { LOG_CRITICAL(Core, "Failed to load ROM (Error {})!", static_cast<int>(load_result)); Shutdown(); @@ -183,6 +183,10 @@ struct System::Impl { gpu_core->Start(); cpu_core_manager.StartThreads(); + // All threads are started, begin main process execution, now that we're in the clear. + main_process->Run(load_parameters->main_thread_priority, + load_parameters->main_thread_stack_size); + status = ResultStatus::Success; return status; } |