summaryrefslogtreecommitdiff
path: root/src/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'src/kernel')
-rw-r--r--src/kernel/proc.c18
-rw-r--r--src/kernel/proc.h1
-rw-r--r--src/kernel/syscalls.c26
3 files changed, 7 insertions, 38 deletions
diff --git a/src/kernel/proc.c b/src/kernel/proc.c
index cd9db9b..bbf939c 100644
--- a/src/kernel/proc.c
+++ b/src/kernel/proc.c
@@ -353,17 +353,13 @@ void proc_tryreap(Proc *dead) {
if (parent->awaited_death.pid && parent->awaited_death.pid != pid) {
return; /* we're not The One */
}
- if (parent->awaited_death.legacy) {
- regs_savereturn(&parent->regs, dead->death_msg);
- } else {
- regs_savereturn(&parent->regs, pid);
- if (parent->awaited_death.out) {
- struct sys_wait2 __user *out = parent->awaited_death.out;
- struct sys_wait2 data;
- memset(&data, 0, sizeof data);
- data.status = dead->death_msg;
- pcpy_to(parent, out, &data, sizeof data);
- }
+ regs_savereturn(&parent->regs, pid);
+ if (parent->awaited_death.out) {
+ struct sys_wait2 __user *out = parent->awaited_death.out;
+ struct sys_wait2 data;
+ memset(&data, 0, sizeof data);
+ data.status = dead->death_msg;
+ pcpy_to(parent, out, &data, sizeof data);
}
proc_setstate(parent, PS_RUNNING);
}
diff --git a/src/kernel/proc.h b/src/kernel/proc.h
index afa4439..0dffe08 100644
--- a/src/kernel/proc.h
+++ b/src/kernel/proc.h
@@ -45,7 +45,6 @@ struct Proc {
union { /* saved value, meaning depends on .state */
int death_msg; // PS_DEAD
struct {
- bool legacy; /* false = wait2, true = await */
uint32_t pid; /* valid if nonzero */
struct sys_wait2 __user *out;
} awaited_death;
diff --git a/src/kernel/syscalls.c b/src/kernel/syscalls.c
index a8b47ae..0dda320 100644
--- a/src/kernel/syscalls.c
+++ b/src/kernel/syscalls.c
@@ -22,30 +22,6 @@ _Noreturn void _sys_exit(long ret) {
proc_switch_any();
}
-long _sys_await(void) {
- bool has_children = false;
- proc_setstate(proc_cur, PS_WAITS4CHILDDEATH);
- proc_cur->awaited_death.legacy = true;
- proc_cur->awaited_death.pid = 0;
-
- for (Proc *iter = proc_cur->child;
- iter; iter = iter->sibling)
- {
- if (iter->noreap) continue;
- has_children = true;
- if (iter->state == PS_TOREAP) {
- proc_tryreap(iter);
- return 0; // dummy
- }
- }
-
- if (!has_children) {
- proc_setstate(proc_cur, PS_RUNNING);
- SYSCALL_RETURN(~0); // TODO errno
- }
- return 0; // dummy
-}
-
long _sys_fork(int flags, hid_t __user *fs_front) {
Proc *child;
@@ -410,7 +386,6 @@ int _sys_wait2(int pid, int flags, struct sys_wait2 __user *out) {
bool has_children = false;
proc_setstate(proc_cur, PS_WAITS4CHILDDEATH);
- proc_cur->awaited_death.legacy = false;
proc_cur->awaited_death.out = out;
proc_cur->awaited_death.pid = (0 < pid) ? pid : 0;
@@ -463,7 +438,6 @@ long _syscall(long num, long a, long b, long c, long d, long e) {
* see execbuf */
switch (num) {
break; case _SYS_EXIT: _sys_exit(a);
- break; case _SYS_AWAIT: _sys_await();
break; case _SYS_FORK: _sys_fork(a, (userptr_t)b);
break; case _SYS_OPEN: _sys_open((userptr_t)a, b, c);
break; case _SYS_MOUNT: _sys_mount(a, (userptr_t)b, c);