diff options
| -rw-r--r-- | console.c | 8 | ||||
| -rw-r--r-- | pipe.c | 4 | ||||
| -rw-r--r-- | proc.c | 2 | 
3 files changed, 10 insertions, 4 deletions
| @@ -6,6 +6,7 @@  #include "dev.h"  #include "param.h"  #include "mmu.h" +#include "proc.h"  struct spinlock console_lock;  int panicked = 0; @@ -395,8 +396,13 @@ console_read(int minor, char *dst, int n)    target = n;    acquire(&kbd_lock);    while(n > 0){ -    while(kbd_r == kbd_w) +    while(kbd_r == kbd_w){ +      if(curproc[cpu()]->killed){ +        release(&kbd_lock); +        return -1; +      }        sleep(&kbd_r, &kbd_lock); +    }      c = kbd_buf[kbd_r++];      if(c == C('D')){  // EOF        if(n < target){ @@ -86,7 +86,7 @@ pipe_write(struct pipe *p, char *addr, int n)    for(i = 0; i < n; i++){      while(((p->writep + 1) % PIPESIZE) == p->readp){ -      if(p->readopen == 0){ +      if(p->readopen == 0 || curproc[cpu()]->killed){          release(&p->lock);          return -1;        } @@ -110,7 +110,7 @@ pipe_read(struct pipe *p, char *addr, int n)    acquire(&p->lock);    while(p->readp == p->writep){ -    if(p->writeopen == 0){ +    if(p->writeopen == 0 || curproc[cpu()]->killed){        release(&p->lock);        return 0;      } @@ -405,7 +405,7 @@ proc_wait(void)      }      // No point waiting if we don't have any children. -    if(!havekids){ +    if(!havekids || cp->killed){        release(&proc_table_lock);        return -1;      } | 
