aboutsummaryrefslogtreecommitdiff
path: root/src/orphanage.c
diff options
context:
space:
mode:
authorKimplul <kimi.h.kuparinen@gmail.com>2024-07-04 22:52:47 +0300
committerKimplul <kimi.h.kuparinen@gmail.com>2024-07-04 22:52:47 +0300
commitfdbc5adf83741d7e3af0c3f0ffdb59bdf42493b6 (patch)
tree2eb538b9ecc2898d1f94305fe56d0625060834de /src/orphanage.c
parentb82479a69cd6110c9099031e133fda62f8e11222 (diff)
downloadkmi-fdbc5adf83741d7e3af0c3f0ffdb59bdf42493b6.tar.gz
kmi-fdbc5adf83741d7e3af0c3f0ffdb59bdf42493b6.zip
generalize orphants
+ Allow threads to make themselves become orphants
Diffstat (limited to 'src/orphanage.c')
-rw-r--r--src/orphanage.c13
1 files changed, 7 insertions, 6 deletions
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);