diff options
| author | Kimplul <kimi.h.kuparinen@gmail.com> | 2024-07-04 22:52:47 +0300 |
|---|---|---|
| committer | Kimplul <kimi.h.kuparinen@gmail.com> | 2024-07-04 22:52:47 +0300 |
| commit | fdbc5adf83741d7e3af0c3f0ffdb59bdf42493b6 (patch) | |
| tree | 2eb538b9ecc2898d1f94305fe56d0625060834de /src/orphanage.c | |
| parent | b82479a69cd6110c9099031e133fda62f8e11222 (diff) | |
| download | kmi-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.c | 13 |
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); |
