20#include "pedigree/kernel/Log.h"
21#include "pedigree/kernel/process/Process.h"
22#include "pedigree/kernel/utilities/ZombieQueue.h"
23#include "pedigree/kernel/utilities/new"
27#if HOSTED && PEDIGREE_HOSTED_SMOKE_TESTS
28ZombieProcess::ReapHook ZombieProcess::m_ReapHook =
nullptr;
31ZombieQueue::ZombieQueue() :
RequestQueue(MakeConstantString(
"ZombieQueue")) {
35 m_nMaxAsyncRequests = ~static_cast<size_t>(0);
38ZombieQueue::~ZombieQueue() {
48 FATAL(
"ZombieQueue cannot publish a null object.");
53 FATAL(
"ZombieQueue rejected mandatory destruction work while stopped.");
58 uint64_t p5, uint64_t p6, uint64_t p7, uint64_t p8) {
71ZombieProcess::ZombieProcess(
Process* pProcess) : m_pProcess(pProcess) {}
73ZombieProcess::~ZombieProcess() {
74#if HOSTED && PEDIGREE_HOSTED_SMOKE_TESTS
75 ReapHook reapHook = __atomic_load_n(&m_ReapHook, __ATOMIC_ACQUIRE);
77 reapHook(m_pProcess, ReapPhase::Entered);
82 "ZombieQueue rejected an exiting Process before its off-stack "
83 "completion; leaking it rather than deleting a live stack.");
86#if HOSTED && PEDIGREE_HOSTED_SMOKE_TESTS
88 reapHook(m_pProcess, ReapPhase::Reapable);
95#if HOSTED && PEDIGREE_HOSTED_SMOKE_TESTS
96void ZombieProcess::setReapHook(ReapHook hook) {
97 __atomic_store_n(&m_ReapHook, hook, __ATOMIC_RELEASE);
bool waitUntilTerminationReapable()
void prepareForDestruction()
uint64_t addAsyncRequest(size_t priority, uint64_t p1=0, uint64_t p2=0, uint64_t p3=0, uint64_t p4=0, uint64_t p5=0, uint64_t p6=0, uint64_t p7=0, uint64_t p8=0)
virtual uint64_t executeRequest(uint64_t p1, uint64_t p2, uint64_t p3, uint64_t p4, uint64_t p5, uint64_t p6, uint64_t p7, uint64_t p8)
virtual void cancelRequest(const Request &request)