summaryrefslogtreecommitdiff
path: root/pipe.c
diff options
context:
space:
mode:
authorrsc <rsc>2007-08-08 10:29:42 +0000
committerrsc <rsc>2007-08-08 10:29:42 +0000
commitf2f062da61eaca1dee675281c3b6b95d220ab322 (patch)
treeb2ad7ea8bf2359cf090d4ea1b8efa1969309ec6b /pipe.c
parent1cb183a987bb08cb0b25a6b8bd7e4011325c8ca9 (diff)
downloadxv6-labs-f2f062da61eaca1dee675281c3b6b95d220ab322.tar.gz
xv6-labs-f2f062da61eaca1dee675281c3b6b95d220ab322.tar.bz2
xv6-labs-f2f062da61eaca1dee675281c3b6b95d220ab322.zip
check p->killed for long-lived sleeps
Diffstat (limited to 'pipe.c')
-rw-r--r--pipe.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/pipe.c b/pipe.c
index 7ef89e2..923e609 100644
--- a/pipe.c
+++ b/pipe.c
@@ -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;
}