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

Reply via email to