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 <chenguangmin...@foxmail.com> 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: dev-unsubscr...@brpc.apache.org For additional commands, e-mail: dev-h...@brpc.apache.org