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

shinrich pushed a commit to branch avx-53179
in repository https://gitbox.apache.org/repos/asf/trafficserver.git

commit 2ea3642263d0ae6b23546ab511424fd669b8172b
Author: Kees Spoelstra <[email protected]>
AuthorDate: Tue Jul 2 12:39:58 2024 +0000

    AVX-54729: fix memory leak
---
 aviatrix/plugins/avx_policy_driver/web_filter.cc | 21 ++++++++++++---------
 1 file changed, 12 insertions(+), 9 deletions(-)

diff --git a/aviatrix/plugins/avx_policy_driver/web_filter.cc 
b/aviatrix/plugins/avx_policy_driver/web_filter.cc
index 2596b267fa..3a90a3ee16 100644
--- a/aviatrix/plugins/avx_policy_driver/web_filter.cc
+++ b/aviatrix/plugins/avx_policy_driver/web_filter.cc
@@ -37,28 +37,28 @@ class PolicyHolder
 {
 public:
   void
-  SetPolicies(Layer7Config &new_config)
+  SetPolicies(std::shared_ptr<Layer7Config> new_config)
   {
     Dbg(dbg_ctl, "UpdatePolicy old generation=0x%x", this->generationNumber);
     std::unique_lock<std::shared_mutex> lock(this->mutex);
 
-    this->current_config = std::make_shared<Layer7Config>(new_config);
-    auto it              = new_config.mutable_policies()->begin();
+    this->current_config = new_config;
+    auto it              = new_config->mutable_policies()->begin();
     auto offset          = policy_hit_counter_manager.CurrentOffset();
     auto length          = policy_hit_counter_manager.CurrentLength();
-    auto send_old        = 
policy_hit_counter_manager.CreateNew(new_config.policies_size());
+    auto send_old        = 
policy_hit_counter_manager.CreateNew(new_config->policies_size());
     uint32_t index       = 0;
 
     if (send_old && send_stats_callback) {
       send_stats_callback(offset, length);
     }
-    while (it != new_config.mutable_policies()->end()) {
+    while (it != new_config->mutable_policies()->end()) {
       policy_hit_counter_manager.ResetCounter(index++, it->id().a(), 
it->id().b());
       it++;
     }
 
-    trafficFilters.load(new_config);
-    webFilters.load(new_config);
+    trafficFilters.load(*new_config);
+    webFilters.load(*new_config);
     this->generationNumber = this->generationNumber + 1;
   }
 
@@ -167,6 +167,7 @@ IsPolicyLoaded()
 }
 
 static std::mutex load_policy_mutex;
+
 bool
 LoadPolicy(bool skip_if_exists)
 {
@@ -180,7 +181,8 @@ LoadPolicy(bool skip_if_exists)
     return true;
   }
 
-  Layer7Config *policyConfig = FetchLayer7Policy();
+  std::shared_ptr<Layer7Config> policyConfig(FetchLayer7Policy());
+
   if (policyConfig != nullptr) {
     if (current_config != nullptr) {
       // ignore duplicates
@@ -190,7 +192,8 @@ LoadPolicy(bool skip_if_exists)
         return true;
       }
     }
-    activePolicy.SetPolicies(*policyConfig);
+    // SetPolicies will own the policy
+    activePolicy.SetPolicies(policyConfig);
   }
   return policyConfig != nullptr;
 }

Reply via email to