From 1d5e56659af7945daac0f79a06b839bfd59c8f1f Mon Sep 17 00:00:00 2001 From: dzwdz Date: Mon, 4 Oct 2021 21:01:31 +0200 Subject: remove support for processes returning strings on exit This isn't really all that useful, it doesn't enable anything that wasn't possible before. With it removed I'll be able to implement process_exit() in a much simpler way. --- src/kernel/proc.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) (limited to 'src/kernel/proc.c') diff --git a/src/kernel/proc.c b/src/kernel/proc.c index b9f96c8..b1dc5c1 100644 --- a/src/kernel/proc.c +++ b/src/kernel/proc.c @@ -115,16 +115,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 } } -- cgit v1.2.3 From 33ef18732abb1ec03469b7c0fe271a6599318682 Mon Sep 17 00:00:00 2001 From: dzwdz Date: Mon, 4 Oct 2021 21:37:01 +0200 Subject: implement process_kill() --- src/kernel/proc.c | 6 ++++++ src/kernel/proc.h | 2 ++ src/kernel/syscalls.c | 4 +--- 3 files changed, 9 insertions(+), 3 deletions(-) (limited to 'src/kernel/proc.c') diff --git a/src/kernel/proc.c b/src/kernel/proc.c index b1dc5c1..47fd2ec 100644 --- a/src/kernel/proc.c +++ b/src/kernel/proc.c @@ -103,6 +103,12 @@ 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; diff --git a/src/kernel/proc.h b/src/kernel/proc.h index 592451c..7c338bb 100644 --- a/src/kernel/proc.h +++ b/src/kernel/proc.h @@ -53,6 +53,8 @@ _Noreturn void process_switch_any(void); // switches to any running process struct process *process_find(enum process_state); handle_t process_find_handle(struct process *proc); // finds the first free handle +void process_kill(struct process *proc, int ret); + /** Tries to transistion from PS_DEAD to PS_DEADER. * @return a nonnegative length of the quit message if successful, a negative val otherwise*/ int process_try2collect(struct process *dead); diff --git a/src/kernel/syscalls.c b/src/kernel/syscalls.c index c89efc7..22bf1f6 100644 --- a/src/kernel/syscalls.c +++ b/src/kernel/syscalls.c @@ -9,9 +9,7 @@ #include _Noreturn void _syscall_exit(int ret) { - process_current->state = PS_DEAD; - process_current->death_msg = ret; - process_try2collect(process_current); + process_kill(process_current, ret); process_switch_any(); } -- cgit v1.2.3 From bb2c65663dd03aaf1948c36c7e6006af7e3840a6 Mon Sep 17 00:00:00 2001 From: dzwdz Date: Mon, 4 Oct 2021 21:37:20 +0200 Subject: remove unused variables in process_try2collect --- src/kernel/proc.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'src/kernel/proc.c') diff --git a/src/kernel/proc.c b/src/kernel/proc.c index 47fd2ec..17af0cd 100644 --- a/src/kernel/proc.c +++ b/src/kernel/proc.c @@ -111,8 +111,7 @@ void process_kill(struct process *proc, int ret) { int process_try2collect(struct process *dead) { struct process *parent = dead->parent; - int len, ret; - bool res; + int ret; assert(dead->state == PS_DEAD); -- cgit v1.2.3