summaryrefslogtreecommitdiff
path: root/kernel/proc.c
diff options
context:
space:
mode:
authorFrans Kaashoek <[email protected]>2022-08-23 07:31:08 -0400
committerFrans Kaashoek <[email protected]>2022-08-23 07:31:08 -0400
commitcd6207a972cf7692dceb837f460234eae9df5052 (patch)
treec2e1f8be9e5d030727ee4d5c4f033b8f2e5a3314 /kernel/proc.c
parentbc48c2be47ed4994d23327980737fef441fbbcc8 (diff)
parent4f716c8550b406c3e4b3e0c21b986ef99bc06c40 (diff)
downloadxv6-labs-cd6207a972cf7692dceb837f460234eae9df5052.tar.gz
xv6-labs-cd6207a972cf7692dceb837f460234eae9df5052.tar.bz2
xv6-labs-cd6207a972cf7692dceb837f460234eae9df5052.zip
Merge branch 'riscv-killed' into riscv
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.