diff options
Diffstat (limited to 'kernel/proc.c')
-rw-r--r-- | kernel/proc.c | 21 |
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. |