summaryrefslogtreecommitdiff
path: root/pipe.c
diff options
context:
space:
mode:
authorkolya <kolya>2008-10-15 17:42:56 +0000
committerkolya <kolya>2008-10-15 17:42:56 +0000
commite670a4835858b48e1568742dbe939800e2d44c13 (patch)
tree5d3fc854a2d9e3a79b7c3f8e733d77ce5e2501bf /pipe.c
parentdeca9fef83450fa9659b750497d46e7887064aa5 (diff)
downloadxv6-labs-e670a4835858b48e1568742dbe939800e2d44c13.tar.gz
xv6-labs-e670a4835858b48e1568742dbe939800e2d44c13.tar.bz2
xv6-labs-e670a4835858b48e1568742dbe939800e2d44c13.zip
as rtm noticed, avoid doubly-freeing pipe page
Diffstat (limited to 'pipe.c')
-rw-r--r--pipe.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/pipe.c b/pipe.c
index fda3788..8a580f9 100644
--- a/pipe.c
+++ b/pipe.c
@@ -69,10 +69,11 @@ pipeclose(struct pipe *p, int writable)
p->readopen = 0;
wakeup(&p->writep);
}
- release(&p->lock);
-
- if(p->readopen == 0 && p->writeopen == 0)
+ if(p->readopen == 0 && p->writeopen == 0) {
+ release(&p->lock);
kfree((char*)p, PAGE);
+ } else
+ release(&p->lock);
}
//PAGEBREAK: 30