lib: Revert https://vanadium-review.googlesource.com/#/c/19347/
It looks like this change causes v.io/x/ref/lib/signals to timeout.
Change-Id: Ib5a36e0b44c09e7e75d04d72f7dfceae9804deb3
diff --git a/gosh/buffered_pipe.go b/gosh/buffered_pipe.go
index 6bc9d30..d9e05fd 100644
--- a/gosh/buffered_pipe.go
+++ b/gosh/buffered_pipe.go
@@ -16,12 +16,6 @@
closed bool
}
-var (
- // Make sure the signatures are right, so that io.Copy can be faster.
- _ io.WriterTo = (*bufferedPipe)(nil)
- _ io.ReaderFrom = (*bufferedPipe)(nil)
-)
-
// newBufferedPipe returns a new thread-safe pipe backed by an unbounded
// in-memory buffer. Writes on the pipe never block; reads on the pipe block
// until data is available.
@@ -30,7 +24,7 @@
}
// Read reads from the pipe.
-func (p *bufferedPipe) Read(d []byte) (int, error) {
+func (p *bufferedPipe) Read(d []byte) (n int, err error) {
p.cond.L.Lock()
defer p.cond.L.Unlock()
for {
@@ -45,25 +39,8 @@
}
}
-// WriteTo implements the io.WriterTo method; it is the fast version of Read
-// used by io.Copy.
-func (p *bufferedPipe) WriteTo(w io.Writer) (int64, error) {
- p.cond.L.Lock()
- defer p.cond.L.Unlock()
- for {
- // Read any remaining data before checking whether the pipe is closed.
- if p.buf.Len() > 0 {
- return p.buf.WriteTo(w)
- }
- if p.closed {
- return 0, io.EOF
- }
- p.cond.Wait()
- }
-}
-
// Write writes to the pipe.
-func (p *bufferedPipe) Write(d []byte) (int, error) {
+func (p *bufferedPipe) Write(d []byte) (n int, err error) {
p.cond.L.Lock()
defer p.cond.L.Unlock()
if p.closed {
@@ -73,18 +50,6 @@
return p.buf.Write(d)
}
-// ReadFrom implements the io.ReaderFrom method; it is the fast version of Write
-// used by io.Copy.
-func (p *bufferedPipe) ReadFrom(r io.Reader) (int64, error) {
- p.cond.L.Lock()
- defer p.cond.L.Unlock()
- if p.closed {
- return 0, io.ErrClosedPipe
- }
- defer p.cond.Signal()
- return p.buf.ReadFrom(r)
-}
-
// Close closes the pipe.
func (p *bufferedPipe) Close() error {
p.cond.L.Lock()
diff --git a/gosh/buffered_pipe_test.go b/gosh/buffered_pipe_test.go
index a4fef76..1dcca26 100644
--- a/gosh/buffered_pipe_test.go
+++ b/gosh/buffered_pipe_test.go
@@ -5,57 +5,23 @@
package gosh
import (
- "bytes"
- "io"
"io/ioutil"
- "strings"
"testing"
)
-func TestReadWriteAfterClose(t *testing.T) {
+func TestReadAfterClose(t *testing.T) {
p := newBufferedPipe()
- if n, err := p.Write([]byte("foo")); n != 3 || err != nil {
- t.Errorf("write got (%v,%v) want (3,nil)", n, err)
- }
- if n, err := p.Write([]byte("barbaz")); n != 6 || err != nil {
- t.Errorf("write got (%v,%v) want (6,nil)", n, err)
+ if _, err := p.Write([]byte("foo")); err != nil {
+ t.Errorf("write failed: %v", err)
}
if err := p.Close(); err != nil {
t.Errorf("close failed: %v", err)
}
- // Read after close returns all data terminated by EOF.
- if b, err := ioutil.ReadAll(p); string(b) != "foobarbaz" || err != nil {
- t.Errorf("read got (%s,%v) want (foobarbaz,nil)", b, err)
+ b, err := ioutil.ReadAll(p)
+ if err != nil {
+ t.Errorf("read failed: %v", err)
}
- // Write after close fails.
- n, err := p.Write([]byte("already closed"))
- if got, want := n, 0; got != want {
- t.Errorf("write after close got n %v, want %v", got, want)
- }
- if got, want := err, io.ErrClosedPipe; got != want {
- t.Errorf("write after close got error %v, want %v", got, want)
- }
-}
-
-func TestReadFromWriteTo(t *testing.T) {
- p, buf := newBufferedPipe(), new(bytes.Buffer)
- if n, err := p.(io.ReaderFrom).ReadFrom(strings.NewReader("foobarbaz")); n != 9 || err != nil {
- t.Errorf("readfrom got (%v,%v) want (9,nil)", n, err)
- }
- if n, err := p.(io.WriterTo).WriteTo(buf); n != 9 || err != nil {
- t.Errorf("writeto got (%v,%v) want (9,nil)", n, err)
- }
- if got, want := buf.String(), "foobarbaz"; got != want {
- t.Errorf("writeto got %v want %v", got, want)
- }
- buf.Reset()
- if n, err := p.(io.ReaderFrom).ReadFrom(strings.NewReader("foobarbaz")); n != 9 || err != nil {
- t.Errorf("readfrom got (%v,%v) want (9,nil)", n, err)
- }
- if err := p.Close(); err != nil {
- t.Errorf("close failed: %v", err)
- }
- if n, err := p.(io.WriterTo).WriteTo(buf); n != 9 || err != nil {
- t.Errorf("writeto got (%v,%v) want (9,nil)", n, err)
+ if got, want := string(b), "foo"; got != want {
+ t.Errorf("got %s, want %s", got, want)
}
}