From: Jens Geyer Date: Tue, 3 Dec 2013 21:57:59 +0000 (+0100) Subject: THRIFT-2278 Buffered transport doesn't support writes > buffer size X-Git-Url: https://source.supwisdom.com/gerrit/gitweb?a=commitdiff_plain;h=a5960383273432d5249c113f6413bbe39c13df50;p=common%2Fthrift.git THRIFT-2278 Buffered transport doesn't support writes > buffer size Patch: Matt Jones --- diff --git a/lib/go/thrift/buffered_transport.go b/lib/go/thrift/buffered_transport.go index e3546a51..b92261c5 100644 --- a/lib/go/thrift/buffered_transport.go +++ b/lib/go/thrift/buffered_transport.go @@ -77,12 +77,21 @@ func (p *TBufferedTransport) Read(buf []byte) (n int, err error) { func (p *TBufferedTransport) Write(buf []byte) (n int, err error) { wbuf := p.wbuf - size := len(buf) - if wbuf.pos+size > wbuf.limit { // buffer is full, flush buffer - p.Flush() + remaining := len(buf) + + for remaining > 0 { + if wbuf.pos+remaining > wbuf.limit { // buffer is full, flush buffer + if err := p.Flush(); err != nil { + return n, err + } + } + copied := copy(wbuf.buffer[wbuf.pos:], buf[n:]) + + wbuf.pos += copied + n += copied + remaining -= copied } - n = copy(wbuf.buffer[wbuf.pos:], buf) - wbuf.pos += n + return n, nil } diff --git a/lib/go/thrift/framed_transport.go b/lib/go/thrift/framed_transport.go index 3a59e7b9..d1af0287 100644 --- a/lib/go/thrift/framed_transport.go +++ b/lib/go/thrift/framed_transport.go @@ -95,7 +95,7 @@ func (p *TFramedTransport) Flush() error { } if size > 0 { if n, err := p.writeBuffer.WriteTo(p.transport); err != nil { - print("Error while flushing write buffer of size ", size, " to transport, only wrote ", n, " bytes: ", err, "\n") + print("Error while flushing write buffer of size ", size, " to transport, only wrote ", n, " bytes: ", err.Error(), "\n") return NewTTransportExceptionFromError(err) } }