summaryrefslogtreecommitdiff
path: root/src/kernel/proc.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/kernel/proc.c')
-rw-r--r--src/kernel/proc.c19
1 files changed, 10 insertions, 9 deletions
diff --git a/src/kernel/proc.c b/src/kernel/proc.c
index b9f96c8..17af0cd 100644
--- a/src/kernel/proc.c
+++ b/src/kernel/proc.c
@@ -103,10 +103,15 @@ handle_t process_find_handle(struct process *proc) {
return handle;
}
+void process_kill(struct process *proc, int ret) {
+ proc->state = PS_DEAD;
+ proc->death_msg = ret;
+ process_try2collect(proc);
+}
+
int process_try2collect(struct process *dead) {
struct process *parent = dead->parent;
- int len, ret;
- bool res;
+ int ret;
assert(dead->state == PS_DEAD);
@@ -115,16 +120,12 @@ int process_try2collect(struct process *dead) {
dead->state = PS_DEADER;
parent->state = PS_RUNNING;
- len = min(parent->death_msg.len, dead->death_msg.len);
- res = virt_cpy(
- parent->pages, parent->death_msg.buf,
- dead->pages, dead->death_msg.buf, len);
-
- ret = res ? len : 0;
+ ret = dead->death_msg;
regs_savereturn(&parent->regs, ret);
return ret;
default:
- return -1;
+ return -1; // this return value isn't used anywhere
+ // TODO enforce that, somehow? idk
}
}