summaryrefslogtreecommitdiffhomepage
path: root/Kernel/Source
diff options
context:
space:
mode:
Diffstat (limited to 'Kernel/Source')
-rw-r--r--Kernel/Source/AppMain.cxx10
-rw-r--r--Kernel/Source/CodeManager.cxx37
2 files changed, 29 insertions, 18 deletions
diff --git a/Kernel/Source/AppMain.cxx b/Kernel/Source/AppMain.cxx
index b91d6082..4f5de11f 100644
--- a/Kernel/Source/AppMain.cxx
+++ b/Kernel/Source/AppMain.cxx
@@ -22,6 +22,7 @@
#include <NewKit/KernelCheck.hpp>
#include <NewKit/String.hpp>
#include <NewKit/Utils.hpp>
+#include <KernelKit/CodeManager.hpp>
namespace Detail
{
@@ -177,6 +178,12 @@ namespace Detail
return fNewFS;
}
};
+
+ STATIC NewOS::Void AppWatchdogThread(NewOS::Void)
+ {
+ NewOS::kcout << "SystemSanityThread: Exiting process...";
+ NewOS::ProcessScheduler::Shared().Leak().GetCurrent().Leak().Exit(0);
+ }
} // namespace Detail
/// @file Main microkernel entrypoint.
@@ -186,6 +193,9 @@ EXTERN_C NewOS::Void AppMain(NewOS::Void)
/// Now run kernel loop, until no process are running.
Detail::FilesystemWizard wizard; // automatic.
+ auto cWatchdogThreadName = "SystemSanityThread";
+ NewOS::execute_from_image((NewOS::MainKind)Detail::AppWatchdogThread, cWatchdogThreadName);
+
while (NewOS::ProcessScheduler::Shared().Leak().Run() > 0)
{
;
diff --git a/Kernel/Source/CodeManager.cxx b/Kernel/Source/CodeManager.cxx
index 39917163..001795ce 100644
--- a/Kernel/Source/CodeManager.cxx
+++ b/Kernel/Source/CodeManager.cxx
@@ -8,22 +8,23 @@
#include <KernelKit/CodeManager.hpp>
#include <KernelKit/ProcessScheduler.hpp>
-using namespace NewOS;
-
-/// @brief Executes a new process from a function. kernel code only.
-/// @note This sets up a new stack, anything on the main function that calls the kernel will not be accessible.
-/// @param main the start of the process.
-/// @return if the process was started or not.
-bool execute_from_image(MainKind main, const char* processName) noexcept
+namespace NewOS
{
- if (!main)
- return false;
-
- ProcessHeader proc((VoidPtr)main);
- proc.Kind = ProcessHeader::kDriverKind;
- rt_copy_memory((VoidPtr)processName, proc.Name, rt_string_len(proc.Name));
-
- Ref<ProcessHeader> refProc = proc;
-
- return ProcessScheduler::Shared().Leak().Add(refProc);
-} \ No newline at end of file
+ /// @brief Executes a new process from a function. kernel code only.
+ /// @note This sets up a new stack, anything on the main function that calls the kernel will not be accessible.
+ /// @param main the start of the process.
+ /// @return if the process was started or not.
+ bool execute_from_image(MainKind main, const char* processName) noexcept
+ {
+ if (!main)
+ return false;
+
+ ProcessHeader proc((VoidPtr)main);
+ proc.Kind = ProcessHeader::kDriverKind;
+ rt_copy_memory((VoidPtr)processName, proc.Name, rt_string_len(proc.Name));
+
+ Ref<ProcessHeader> refProc = proc;
+
+ return ProcessScheduler::Shared().Leak().Add(refProc);
+ }
+} // namespace NewOS \ No newline at end of file