diff --git a/src/core/kernel/kernel.cpp b/src/core/kernel/kernel.cpp index 1402b468..4fd8b00b 100644 --- a/src/core/kernel/kernel.cpp +++ b/src/core/kernel/kernel.cpp @@ -95,14 +95,29 @@ KernelObject* Kernel::getProcessFromPID(Handle handle) { } void Kernel::deleteObjectData(KernelObject& object) { - using enum KernelObjectType; - - // Resource limit and thread objects do not allocate heap data, so we don't delete anything - if (object.data == nullptr || object.type == ResourceLimit || object.type == Thread) { + if (object.data == nullptr) { return; } - delete object.data; + // Resource limit and thread objects do not allocate heap data, so we don't delete anything + + switch (object.type) { + case KernelObjectType::AddressArbiter: delete object.getData(); return; + case KernelObjectType::Archive: delete object.getData(); return; + case KernelObjectType::Directory: delete object.getData(); return; + case KernelObjectType::Event: delete object.getData(); return; + case KernelObjectType::File: delete object.getData(); return; + case KernelObjectType::MemoryBlock: delete object.getData(); return; + case KernelObjectType::Port: delete object.getData(); return; + case KernelObjectType::Process: delete object.getData(); return; + case KernelObjectType::ResourceLimit: Helpers::panic("not known to allocate heap data"); return; + case KernelObjectType::Session: delete object.getData(); return; + case KernelObjectType::Mutex: delete object.getData(); return; + case KernelObjectType::Semaphore: delete object.getData(); return; + case KernelObjectType::Thread: Helpers::panic("not known to allocate heap data"); return; + case KernelObjectType::Dummy: Helpers::panic("not known to allocate heap data"); return; + default: [[unlikely]] Helpers::panic("unknown object type"); return; + } } void Kernel::reset() {