THRIFT-3771 TBufferedTransport gets in invalid state on read/write errors
Client: Go
Patch: Tyler Treat
This closes #973
diff --git a/lib/go/thrift/buffered_transport.go b/lib/go/thrift/buffered_transport.go
index 8bcad1e..f73a98b 100644
--- a/lib/go/thrift/buffered_transport.go
+++ b/lib/go/thrift/buffered_transport.go
@@ -62,8 +62,25 @@
return p.tp.Close()
}
+func (p *TBufferedTransport) Read(b []byte) (int, error) {
+ n, err := p.ReadWriter.Read(b)
+ if err != nil {
+ p.ReadWriter.Reader.Reset(p.tp)
+ }
+ return n, err
+}
+
+func (p *TBufferedTransport) Write(b []byte) (int, error) {
+ n, err := p.ReadWriter.Write(b)
+ if err != nil {
+ p.ReadWriter.Writer.Reset(p.tp)
+ }
+ return n, err
+}
+
func (p *TBufferedTransport) Flush() error {
if err := p.ReadWriter.Flush(); err != nil {
+ p.ReadWriter.Writer.Reset(p.tp)
return err
}
return p.tp.Flush()
@@ -72,4 +89,3 @@
func (p *TBufferedTransport) RemainingBytes() (num_bytes uint64) {
return p.tp.RemainingBytes()
}
-