From 09a67641c65c8bdaa1d86dd6ce8ec8310ff7a697 Mon Sep 17 00:00:00 2001 From: Ian Douglas Scott Date: Fri, 7 Jul 2017 21:05:38 -0700 Subject: [PATCH] pipe: make read() return when write end is closed --- src/scheme/pipe.rs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/scheme/pipe.rs b/src/scheme/pipe.rs index 802b748..d5dda17 100644 --- a/src/scheme/pipe.rs +++ b/src/scheme/pipe.rs @@ -172,6 +172,8 @@ impl PipeRead { } fn read(&self, buf: &mut [u8]) -> Result { + let mut resumed = false; + loop { { let mut vec = self.vec.lock(); @@ -186,7 +188,7 @@ impl PipeRead { } } - if i > 0 { + if i > 0 || resumed { return Ok(i); } } @@ -197,6 +199,7 @@ impl PipeRead { return Err(Error::new(EAGAIN)); } else { self.condition.wait(); + resumed = true; } } } @@ -246,7 +249,9 @@ impl PipeWrite { vec.push_back(b); } - self.condition.notify(); + if buf.len() > 0 { + self.condition.notify(); + } Ok(buf.len()) } else {