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

masaori pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/trafficserver.git


The following commit(s) were added to refs/heads/master by this push:
     new 769057c4f3 Fix memory leaks in the Healthchecks plugin (#12025)
769057c4f3 is described below

commit 769057c4f3cb9db1657efefa286231e40885adc7
Author: Hiroaki Nakamura <[email protected]>
AuthorDate: Wed Feb 12 13:21:58 2025 +0900

    Fix memory leaks in the Healthchecks plugin (#12025)
---
 plugins/healthchecks/healthchecks.cc | 17 +++++++++++++++--
 1 file changed, 15 insertions(+), 2 deletions(-)

diff --git a/plugins/healthchecks/healthchecks.cc 
b/plugins/healthchecks/healthchecks.cc
index 23c45e7ad3..c11a543662 100644
--- a/plugins/healthchecks/healthchecks.cc
+++ b/plugins/healthchecks/healthchecks.cc
@@ -384,6 +384,11 @@ parse_configs(const char *fname)
 static void
 cleanup(TSCont contp, HCState *my_state)
 {
+  if (my_state->resp_reader) {
+    TSIOBufferReaderFree(my_state->resp_reader);
+    my_state->resp_reader = nullptr;
+  }
+
   if (my_state->req_buffer) {
     TSIOBufferDestroy(my_state->req_buffer);
     my_state->req_buffer = nullptr;
@@ -394,7 +399,11 @@ cleanup(TSCont contp, HCState *my_state)
     my_state->resp_buffer = nullptr;
   }
 
-  TSVConnClose(my_state->net_vc);
+  if (my_state->net_vc) {
+    TSVConnClose(my_state->net_vc);
+    my_state->net_vc = nullptr;
+  }
+
   TSfree(my_state);
   TSContDestroy(contp);
 }
@@ -423,11 +432,14 @@ hc_process_read(TSCont contp, TSEvent event, HCState 
*my_state)
     my_state->write_vio = TSVConnWrite(my_state->net_vc, contp, 
my_state->resp_reader, INT64_MAX);
   } else if (event == TS_EVENT_ERROR) {
     TSError("[healthchecks] hc_process_read: Received TS_EVENT_ERROR");
+    cleanup(contp, my_state);
   } else if (event == TS_EVENT_VCONN_EOS) {
-    /* client may end the connection, simply return */
+    /* client may end the connection, clean up and return */
+    cleanup(contp, my_state);
     return;
   } else if (event == TS_EVENT_NET_ACCEPT_FAILED) {
     TSError("[healthchecks] hc_process_read: Received 
TS_EVENT_NET_ACCEPT_FAILED");
+    cleanup(contp, my_state);
   } else {
     TSReleaseAssert(!"Unexpected Event");
   }
@@ -454,6 +466,7 @@ hc_process_write(TSCont contp, TSEvent event, HCState 
*my_state)
     cleanup(contp, my_state);
   } else if (event == TS_EVENT_ERROR) {
     TSError("[healthchecks] hc_process_write: Received TS_EVENT_ERROR");
+    cleanup(contp, my_state);
   } else {
     TSReleaseAssert(!"Unexpected Event");
   }

Reply via email to