summaryrefslogtreecommitdiff
path: root/kernel/proc.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/proc.c')
-rw-r--r--kernel/proc.c21
1 files changed, 20 insertions, 1 deletions
diff --git a/kernel/proc.c b/kernel/proc.c
index 1ed3ee5..8d0ca8c 100644
--- a/kernel/proc.c
+++ b/kernel/proc.c
@@ -424,7 +424,7 @@ wait(uint64 addr)
}
// No point waiting if we don't have any children.
- if(!havekids || p->killed){
+ if(!havekids || killed(p)){
release(&wait_lock);
return -1;
}
@@ -603,6 +603,25 @@ kill(int pid)
return -1;
}
+void
+setkilled(struct proc *p)
+{
+ acquire(&p->lock);
+ p->killed = 1;
+ release(&p->lock);
+}
+
+int
+killed(struct proc *p)
+{
+ int k;
+
+ acquire(&p->lock);
+ k = p->killed;
+ release(&p->lock);
+ return k;
+}
+
// Copy to either a user address, or kernel address,
// depending on usr_dst.
// Returns 0 on success, -1 on error.