diff options
author | dzwdz | 2021-10-09 11:53:38 +0000 |
---|---|---|
committer | dzwdz | 2021-10-09 11:53:38 +0000 |
commit | d9463f6e977ce686ac7a55f22b0b25b0ce67b025 (patch) | |
tree | 768fbb673945dba63dc8c5e02f8a4238da4148d7 /src/kernel/proc.c | |
parent | faed927869451cf4070abba91b5a9cf9e32c9a6c (diff) | |
parent | acf41ff6fee44dd24f9383d96fecd992dcb072e2 (diff) |
Merge branch 'main' of github.com:dzwdz/camellia
Diffstat (limited to 'src/kernel/proc.c')
-rw-r--r-- | src/kernel/proc.c | 19 |
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 } } |