From 416206e1dba05164d8dcb335c6b861f1b207c1c7 Mon Sep 17 00:00:00 2001 From: Jeremy Soller Date: Mon, 29 Jan 2018 21:53:39 -0700 Subject: [PATCH] Fix #2 by blocking if more than 64 packets are collected --- Cargo.lock | 10 +++++----- src/master.rs | 4 ++++ src/slave.rs | 6 ++++++ 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b1b3723d54..a4fbd9724a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,14 +1,14 @@ -[root] +[[package]] name = "ptyd" version = "0.1.0" dependencies = [ - "redox_syscall 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", + "redox_syscall 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)", "redox_termios 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "redox_syscall" -version = "0.1.31" +version = "0.1.37" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -16,9 +16,9 @@ name = "redox_termios" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "redox_syscall 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", + "redox_syscall 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)", ] [metadata] -"checksum redox_syscall 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)" = "8dde11f18c108289bef24469638a04dce49da56084f2d50618b226e47eb04509" +"checksum redox_syscall 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)" = "0d92eecebad22b767915e4d529f89f28ee96dbbf5a4810d2b844373f136417fd" "checksum redox_termios 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7e891cfe48e9100a70a3b6eb652fef28920c117d366339687bd5576160db0f76" diff --git a/src/master.rs b/src/master.rs index 709e247866..979b619d68 100644 --- a/src/master.rs +++ b/src/master.rs @@ -62,6 +62,10 @@ impl Resource for PtyMaster { fn write(&self, buf: &[u8]) -> Result { let mut pty = self.pty.borrow_mut(); + if pty.mosi.len() >= 64 { + return Err(Error::new(EWOULDBLOCK)); + } + pty.input(buf); Ok(buf.len()) diff --git a/src/slave.rs b/src/slave.rs index 4e7d5b413b..b727de8adb 100644 --- a/src/slave.rs +++ b/src/slave.rs @@ -70,6 +70,11 @@ impl Resource for PtySlave { fn write(&self, buf: &[u8]) -> Result { if let Some(pty_lock) = self.pty.upgrade() { let mut pty = pty_lock.borrow_mut(); + + if pty.miso.len() >= 64 { + return Err(Error::new(EWOULDBLOCK)); + } + pty.output(buf); Ok(buf.len()) @@ -81,6 +86,7 @@ impl Resource for PtySlave { fn sync(&self) -> Result { if let Some(pty_lock) = self.pty.upgrade() { let mut pty = pty_lock.borrow_mut(); + pty.miso.push_back(vec![1]); Ok(0)