From 8c1838e0934d1b7f0675fb4fa62eb3898f4f6ec7 Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Wed, 15 Mar 2017 10:29:17 -0700 Subject: [PATCH] Fix build on beta/nightly I believe this happened due to a very recent rustc soundness fix! Closes #189 --- src/net/tcp.rs | 35 ++++++++++++++++++++--------------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/src/net/tcp.rs b/src/net/tcp.rs index caf466808..3f725adb4 100644 --- a/src/net/tcp.rs +++ b/src/net/tcp.rs @@ -513,20 +513,22 @@ impl<'a> AsyncRead for &'a TcpStream { if let Async::NotReady = ::poll_read(self) { return Err(::would_block()) } - let mut bufs: [_; 16] = Default::default(); - unsafe { + let r = unsafe { + let mut bufs: [_; 16] = Default::default(); let n = buf.bytes_vec_mut(&mut bufs); - match self.io.get_ref().read_bufs(&mut bufs[..n]) { - Ok(n) => { - buf.advance_mut(n); - Ok(Async::Ready(n)) - } - Err(e) => { - if e.kind() == io::ErrorKind::WouldBlock { - self.io.need_write(); - } - Err(e) + self.io.get_ref().read_bufs(&mut bufs[..n]) + }; + + match r { + Ok(n) => { + unsafe { buf.advance_mut(n); } + Ok(Async::Ready(n)) + } + Err(e) => { + if e.kind() == io::ErrorKind::WouldBlock { + self.io.need_write(); } + Err(e) } } } @@ -541,9 +543,12 @@ impl<'a> AsyncWrite for &'a TcpStream { if let Async::NotReady = ::poll_write(self) { return Err(::would_block()) } - let mut bufs: [_; 16] = Default::default(); - let n = buf.bytes_vec(&mut bufs); - match self.io.get_ref().write_bufs(&bufs[..n]) { + let r = { + let mut bufs: [_; 16] = Default::default(); + let n = buf.bytes_vec(&mut bufs); + self.io.get_ref().write_bufs(&bufs[..n]) + }; + match r { Ok(n) => { buf.advance(n); Ok(Async::Ready(n))