[
https://issues.apache.org/jira/browse/THRIFT-2541?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14055450#comment-14055450
]
Jens Geyer commented on THRIFT-2541:
------------------------------------
Hi [~cpper],
there's another thing. I just haven't seen this earlier, sorry.
This is the changed {{readEnd()}} method below. The first part that resets the
read buffer looks ok to me. But the other part which resets the *write* buffer
seems somewhat unexpected. Why does a *read* operation fiddle with the *write*
buffer? I would have expected this part in {{writeEnd()}}, but maybe I do
overlook something important. What are the reasons for this design?
{code}
uint32_t TFramedTransport::readEnd() {
// include framing bytes
uint32_t num_read = static_cast<uint32_t>(rBound_ - rBuf_.get() +
sizeof(uint32_t));
if (rBufSize_ > bufReclaimThresh_) { // NEW CODE BEGIN
rBufSize_ = 0;
rBuf_.reset();
setReadBuffer(rBuf_.get(), rBufSize_);
}
if (wBufSize_ > bufReclaimThresh_) {
wBufSize_ = DEFAULT_BUFFER_SIZE;
wBuf_.reset(new uint8_t[wBufSize_]);
setWriteBuffer(wBuf_.get(), wBufSize_);
// reset wBase_ with a pad for the frame size
int32_t pad = 0;
wBase_ = wBuf_.get() + sizeof(pad);
} // NEW CODE END
return num_read;
}
{code}
> reclaim TFramedTransport's read and write buffers for thrift cpp
> ----------------------------------------------------------------
>
> Key: THRIFT-2541
> URL: https://issues.apache.org/jira/browse/THRIFT-2541
> Project: Thrift
> Issue Type: Improvement
> Components: C++ - Library
> Affects Versions: 0.9.1
> Reporter: Huabin
> Fix For: 0.9.2
>
> Attachments: THRIFT-2541.patch
>
>
> The internal read and write buffer holds more and more memory but with no
> chance to reclaim , which causes service that use thrift client pool takes a
> large amount of memory. A thresh can be set that trades off between malloc
> and free memory frequently and amount of memory usage.
--
This message was sent by Atlassian JIRA
(v6.2#6252)