summaryrefslogtreecommitdiff
path: root/src/kernel/proc.c
diff options
context:
space:
mode:
authordzwdz2021-10-09 11:53:38 +0000
committerdzwdz2021-10-09 11:53:38 +0000
commitd9463f6e977ce686ac7a55f22b0b25b0ce67b025 (patch)
tree768fbb673945dba63dc8c5e02f8a4238da4148d7 /src/kernel/proc.c
parentfaed927869451cf4070abba91b5a9cf9e32c9a6c (diff)
parentacf41ff6fee44dd24f9383d96fecd992dcb072e2 (diff)
Merge branch 'main' of github.com:dzwdz/camellia
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
}
}