diff --git a/pipe.c b/pipe.c
index fda3788a488232ffcc7aa6fa39e426d33aa172a4..8a580f95e63e5c536174fc9d06cf22aab13e3d16 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