This is an automated email from the ASF dual-hosted git repository.

zwoop pushed a commit to branch 9.2.x
in repository https://gitbox.apache.org/repos/asf/trafficserver.git


The following commit(s) were added to refs/heads/9.2.x by this push:
     new ad13283987 LSan: Fix memory leak of test_libhttp2 (#10543)
ad13283987 is described below

commit ad132839878a3e6f15c13a8a162408ff991c8eaa
Author: Masaori Koshiba <masa...@apache.org>
AuthorDate: Tue Oct 17 07:27:44 2023 +0900

    LSan: Fix memory leak of test_libhttp2 (#10543)
    
    * LSan: Fix memory leak of test_libhttp2
    
    * Remove duplicated lambdas
    
    (cherry picked from commit 1882950bdcb03449c1b946d8a99981edbf323556)
---
 proxy/http2/unit_tests/test_HpackIndexingTable.cc | 30 +++++++++++++++++------
 1 file changed, 22 insertions(+), 8 deletions(-)

diff --git a/proxy/http2/unit_tests/test_HpackIndexingTable.cc 
b/proxy/http2/unit_tests/test_HpackIndexingTable.cc
index 75ec83a061..7d72441094 100644
--- a/proxy/http2/unit_tests/test_HpackIndexingTable.cc
+++ b/proxy/http2/unit_tests/test_HpackIndexingTable.cc
@@ -36,6 +36,20 @@ static constexpr int MAX_TEST_FIELD_NUM                     
= 8;
 static constexpr int MAX_REQUEST_HEADER_SIZE                = 131072;
 static constexpr int MAX_TABLE_SIZE                         = 4096;
 
+namespace
+{
+/**
+  When HTTHdr::create is called, HTTPHdr::destroy needs to be called to free 
HdrHeap.
+  When Issue #10541 is fixed, we don't need this helper.
+*/
+void
+destroy_http_hdr(HTTPHdr *hdr)
+{
+  hdr->destroy();
+  delete hdr;
+}
+} // namespace
+
 TEST_CASE("HPACK low level APIs", "[hpack]")
 {
   SECTION("indexed_header_field")
@@ -71,7 +85,7 @@ TEST_CASE("HPACK low level APIs", "[hpack]")
       HpackIndexingTable indexing_table(4096);
 
       for (const auto &i : indexed_test_case) {
-        std::unique_ptr<HTTPHdr> headers(new HTTPHdr);
+        std::unique_ptr<HTTPHdr, void (*)(HTTPHdr *)> headers(new HTTPHdr, 
destroy_http_hdr);
         headers->create(HTTP_TYPE_REQUEST);
         MIMEField *field = mime_field_create(headers->m_heap, 
headers->m_http->m_fields_impl);
         MIMEFieldWrapper header(field, headers->m_heap, 
headers->m_http->m_fields_impl);
@@ -224,7 +238,7 @@ TEST_CASE("HPACK low level APIs", "[hpack]")
         HpackIndexingTable indexing_table(4096);
 
         for (const auto &i : literal_test_case) {
-          std::unique_ptr<HTTPHdr> headers(new HTTPHdr);
+          std::unique_ptr<HTTPHdr, void (*)(HTTPHdr *)> headers(new HTTPHdr, 
destroy_http_hdr);
           headers->create(HTTP_TYPE_REQUEST);
           MIMEField *field = mime_field_create(headers->m_heap, 
headers->m_http->m_fields_impl);
           MIMEFieldWrapper header(field, headers->m_heap, 
headers->m_http->m_fields_impl);
@@ -349,7 +363,7 @@ TEST_CASE("HPACK high level APIs", "[hpack]")
     indexing_table.update_maximum_size(DYNAMIC_TABLE_SIZE_FOR_REGRESSION_TEST);
 
     for (unsigned int i = 0; i < sizeof(encoded_field_response_test_case) / 
sizeof(encoded_field_response_test_case[0]); i++) {
-      std::unique_ptr<HTTPHdr> headers(new HTTPHdr);
+      std::unique_ptr<HTTPHdr, void (*)(HTTPHdr *)> headers(new HTTPHdr, 
destroy_http_hdr);
       headers->create(HTTP_TYPE_RESPONSE);
 
       for (unsigned int j = 0; j < sizeof(raw_field_response_test_case[i]) / 
sizeof(raw_field_response_test_case[i][0]); j++) {
@@ -455,7 +469,7 @@ TEST_CASE("HPACK high level APIs", "[hpack]")
     HpackIndexingTable indexing_table(4096);
 
     for (unsigned int i = 0; i < sizeof(encoded_field_request_test_case) / 
sizeof(encoded_field_request_test_case[0]); i++) {
-      std::unique_ptr<HTTPHdr> headers(new HTTPHdr);
+      std::unique_ptr<HTTPHdr, void (*)(HTTPHdr *)> headers(new HTTPHdr, 
destroy_http_hdr);
       headers->create(HTTP_TYPE_REQUEST);
 
       hpack_decode_header_block(indexing_table, headers.get(), 
encoded_field_request_test_case[i].encoded_field,
@@ -488,7 +502,7 @@ TEST_CASE("HPACK high level APIs", "[hpack]")
 
     // add entries in dynamic table
     {
-      std::unique_ptr<HTTPHdr> headers(new HTTPHdr);
+      std::unique_ptr<HTTPHdr, void (*)(HTTPHdr *)> headers(new HTTPHdr, 
destroy_http_hdr);
       headers->create(HTTP_TYPE_REQUEST);
 
       // C.3.1.  First Request
@@ -504,7 +518,7 @@ TEST_CASE("HPACK high level APIs", "[hpack]")
 
     // clear all entries by setting a maximum size of 0
     {
-      std::unique_ptr<HTTPHdr> headers(new HTTPHdr);
+      std::unique_ptr<HTTPHdr, void (*)(HTTPHdr *)> headers(new HTTPHdr, 
destroy_http_hdr);
       headers->create(HTTP_TYPE_REQUEST);
 
       uint8_t data[] = {0x20};
@@ -518,7 +532,7 @@ TEST_CASE("HPACK high level APIs", "[hpack]")
 
     // make the maximum size back to 4096
     {
-      std::unique_ptr<HTTPHdr> headers(new HTTPHdr);
+      std::unique_ptr<HTTPHdr, void (*)(HTTPHdr *)> headers(new HTTPHdr, 
destroy_http_hdr);
       headers->create(HTTP_TYPE_REQUEST);
 
       uint8_t data[] = {0x3f, 0xe1, 0x1f};
@@ -532,7 +546,7 @@ TEST_CASE("HPACK high level APIs", "[hpack]")
 
     // error with exceeding the limit (MAX_TABLE_SIZE)
     {
-      std::unique_ptr<HTTPHdr> headers(new HTTPHdr);
+      std::unique_ptr<HTTPHdr, void (*)(HTTPHdr *)> headers(new HTTPHdr, 
destroy_http_hdr);
       headers->create(HTTP_TYPE_REQUEST);
 
       uint8_t data[] = {0x3f, 0xe2, 0x1f};

Reply via email to