This is an automated email from the ASF dual-hosted git repository.
jiashunzhu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/brpc.git
The following commit(s) were added to refs/heads/master by this push:
new da1f542a Fix http verbose memory leak (#2429)
da1f542a is described below
commit da1f542a67cb2151bcc0653097a48ccfe397fa21
Author: Bright Chen <[email protected]>
AuthorDate: Mon Dec 4 00:26:05 2023 +0800
Fix http verbose memory leak (#2429)
---
src/brpc/details/http_message.cpp | 11 ++++-------
src/brpc/details/http_message.h | 2 +-
src/brpc/policy/http2_rpc_protocol.cpp | 4 ++--
3 files changed, 7 insertions(+), 10 deletions(-)
diff --git a/src/brpc/details/http_message.cpp
b/src/brpc/details/http_message.cpp
index ab8bb4f2..fa367434 100644
--- a/src/brpc/details/http_message.cpp
+++ b/src/brpc/details/http_message.cpp
@@ -107,10 +107,10 @@ int HttpMessage::on_header_value(http_parser *parser,
http_message->_cur_value->append(at, length);
}
if (FLAGS_http_verbose) {
- butil::IOBufBuilder* vs = http_message->_vmsgbuilder;
+ butil::IOBufBuilder* vs = http_message->_vmsgbuilder.get();
if (vs == NULL) {
vs = new butil::IOBufBuilder;
- http_message->_vmsgbuilder = vs;
+ http_message->_vmsgbuilder.reset(vs);
if (parser->type == HTTP_REQUEST) {
*vs << "[ HTTP REQUEST @" << butil::my_ip() << " ]\n< "
<< HttpMethod2Str((HttpMethod)parser->method) << ' '
@@ -231,8 +231,7 @@ int HttpMessage::OnBody(const char *at, const size_t
length) {
// the body is probably streaming data which is too long to print.
header().status_code() == HTTP_STATUS_OK) {
LOG(INFO) << '\n' << _vmsgbuilder->buf();
- delete _vmsgbuilder;
- _vmsgbuilder = NULL;
+ _vmsgbuilder.reset(NULL);
} else {
if (_vbodylen < (size_t)FLAGS_http_verbose_max_body_length) {
int plen = std::min(length,
(size_t)FLAGS_http_verbose_max_body_length
@@ -296,8 +295,7 @@ int HttpMessage::OnMessageComplete() {
- (size_t)FLAGS_http_verbose_max_body_length << " bytes>";
}
LOG(INFO) << '\n' << _vmsgbuilder->buf();
- delete _vmsgbuilder;
- _vmsgbuilder = NULL;
+ _vmsgbuilder.reset(NULL);
}
_cur_header.clear();
_cur_value = NULL;
@@ -408,7 +406,6 @@ HttpMessage::HttpMessage(bool read_body_progressively,
, _read_body_progressively(read_body_progressively)
, _body_reader(NULL)
, _cur_value(NULL)
- , _vmsgbuilder(NULL)
, _vbodylen(0) {
http_parser_init(&_parser, HTTP_BOTH);
_parser.data = this;
diff --git a/src/brpc/details/http_message.h b/src/brpc/details/http_message.h
index ca978b5b..dc999cfa 100644
--- a/src/brpc/details/http_message.h
+++ b/src/brpc/details/http_message.h
@@ -122,7 +122,7 @@ private:
protected:
// Only valid when -http_verbose is on
- butil::IOBufBuilder* _vmsgbuilder;
+ std::unique_ptr<butil::IOBufBuilder> _vmsgbuilder;
size_t _vbodylen;
};
diff --git a/src/brpc/policy/http2_rpc_protocol.cpp
b/src/brpc/policy/http2_rpc_protocol.cpp
index d5f388be..df88d71f 100644
--- a/src/brpc/policy/http2_rpc_protocol.cpp
+++ b/src/brpc/policy/http2_rpc_protocol.cpp
@@ -1285,10 +1285,10 @@ int
H2StreamContext::ConsumeHeaders(butil::IOBufBytesIterator& it) {
}
if (FLAGS_http_verbose) {
- butil::IOBufBuilder* vs = this->_vmsgbuilder;
+ butil::IOBufBuilder* vs = this->_vmsgbuilder.get();
if (vs == NULL) {
vs = new butil::IOBufBuilder;
- this->_vmsgbuilder = vs;
+ this->_vmsgbuilder.reset(vs);
if (_conn_ctx->is_server_side()) {
*vs << "[ H2 REQUEST @" << butil::my_ip() << " ]";
} else {
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]