From fdbc5adf83741d7e3af0c3f0ffdb59bdf42493b6 Mon Sep 17 00:00:00 2001 From: Kimplul Date: Thu, 4 Jul 2024 22:52:47 +0300 Subject: generalize orphants + Allow threads to make themselves become orphants --- src/orphanage.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) (limited to 'src/orphanage.c') diff --git a/src/orphanage.c b/src/orphanage.c index 7415e8b..4760f73 100644 --- a/src/orphanage.c +++ b/src/orphanage.c @@ -14,17 +14,17 @@ bool orphan(struct tcb *t) { - struct tcb *r = get_rproc(t); - return !r || r->dead; + return is_set(t->state, TCB_ORPHAN); } void orphanize(struct tcb *t) { - catastrophic_assert(!is_rpc(t)); + set_bit(t->state, TCB_ORPHAN); +} - struct tcb *r = get_tcb(t->rid); - if (r) - unreference_proc(r); +void unorphanize(struct tcb *t) +{ + catastrophic_assert(!is_rpc(t)); /* attach to init process */ struct tcb *init = get_tcb(1); @@ -35,6 +35,7 @@ void orphanize(struct tcb *t) t->eid = 1; t->proc = init->proc; + t->rpc_stack = RPC_STACK_BASE; use_vmem(t->proc.vmem); catastrophic_assert(init->callback); -- cgit v1.3