[ https://issues.apache.org/jira/browse/THRIFT-2359?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Jens Geyer resolved THRIFT-2359. -------------------------------- Resolution: Fixed Fix Version/s: 0.9.2 +1 and committed. Thank you, Chris! > TBufferedTransport doesn't clear it's buffer on a failed flush call > ------------------------------------------------------------------- > > Key: THRIFT-2359 > URL: https://issues.apache.org/jira/browse/THRIFT-2359 > Project: Thrift > Issue Type: Bug > Components: PHP - Library > Affects Versions: 0.9.1 > Reporter: Chris Trotman > Labels: easyfix > Fix For: 0.9.2 > > Attachments: thrift-2359-fix-flush-in-tbufferedtransport-php.patch > > > On flush in the php implementation of the TBufferedTransport it doesn't clear > the internal buffer before calling the underlying write function. However the > write function in TBufferedTransport does. > {code:title=TBufferedTransport.php} > public function write($buf) { > $this->wBuf_ .= $buf; > if (TStringFuncFactory::create()->strlen($this->wBuf_) >= > $this->wBufSize_) { > $out = $this->wBuf_; > // Note that we clear the internal wBuf_ prior to the underlying write > // to ensure we're in a sane state (i.e. internal buffer cleaned) > // if the underlying write throws up an exception > $this->wBuf_ = ''; > $this->transport_->write($out); > } > } > public function flush() { > if (TStringFuncFactory::create()->strlen($this->wBuf_) > 0) { > $this->transport_->write($this->wBuf_); > $this->wBuf_ = ''; > } > $this->transport_->flush(); > } > {code} > If a write on the underlying transport fails when we call flush, the internal > buffer won't be cleared. > This causes some interesting issues when this happens. If you happen to call > the same function twice (first call fails to write, but the second one > succeeds), it will call the function on the server with the data provided in > the first call, rather than your current call. -- This message was sent by Atlassian JIRA (v6.1.5#6160)