diff --git a/orbis-kernel/include/orbis/module/Module.hpp b/orbis-kernel/include/orbis/module/Module.hpp index 1e67bf029..933765cea 100644 --- a/orbis-kernel/include/orbis/module/Module.hpp +++ b/orbis-kernel/include/orbis/module/Module.hpp @@ -122,6 +122,8 @@ struct Module final { unsigned _total_size = 0; void incRef() { + if (_total_size != sizeof(Module)) + std::abort(); if (references.fetch_add(1, std::memory_order::relaxed) > 512) { assert(!"too many references"); } diff --git a/orbis-kernel/include/orbis/utils/Rc.hpp b/orbis-kernel/include/orbis/utils/Rc.hpp index 2790772ea..bff611f60 100644 --- a/orbis-kernel/include/orbis/utils/Rc.hpp +++ b/orbis-kernel/include/orbis/utils/Rc.hpp @@ -6,7 +6,7 @@ #include namespace orbis { -template T *knew(Args &&...args); +//template T *knew(Args &&...args); inline namespace utils { void kfree(void* ptr, std::size_t size); @@ -17,6 +17,8 @@ struct RcBase { virtual ~RcBase() = default; void incRef() { + if (!_total_size) + std::abort(); if (references.fetch_add(1, std::memory_order::relaxed) > 512) { assert(!"too many references"); } @@ -120,10 +122,10 @@ public: auto operator<=>(const Ref &other) const = default; }; -template - requires(std::is_constructible_v) -Ref kcreate(ArgsT &&...args) { - return Ref(knew(std::forward(args)...)); -} +// template +// requires(std::is_constructible_v) +// Ref kcreate(ArgsT &&...args) { +// return Ref(knew(std::forward(args)...)); +// } } // namespace utils } // namespace orbis diff --git a/orbis-kernel/src/KernelContext.cpp b/orbis-kernel/src/KernelContext.cpp index 9a5de8699..427857521 100644 --- a/orbis-kernel/src/KernelContext.cpp +++ b/orbis-kernel/src/KernelContext.cpp @@ -15,7 +15,9 @@ KernelContext &g_context = *[]() -> KernelContext * { return new (ptr) KernelContext; }(); -KernelContext::KernelContext() {} +KernelContext::KernelContext() { + std::printf("orbis::KernelContext initialized, addr=%p", this); +} KernelContext::~KernelContext() {} Process *KernelContext::createProcess(pid_t pid) {