Просмотр исходного кода

Fix memory leak when sending alerts checkoint (#15060)

* Free active_alerts and claim_id

* Free digest context

* Release memory unconditionally
Stelios Fragkakis 1 год назад
Родитель
Сommit
0973652cd5
2 измененных файлов с 3 добавлено и 1 удалено
  1. 2 0
      database/sqlite/sqlite_aclk_alert.c
  2. 1 1
      libnetdata/libnetdata.c

+ 2 - 0
database/sqlite/sqlite_aclk_alert.c

@@ -1114,6 +1114,7 @@ void aclk_push_alarm_checkpoint(RRDHOST *host __maybe_unused)
         buffer_strcat(alarms_to_hash, "");
         len = 0;
     }
+    freez(active_alerts);
 
     char hash[SHA256_DIGEST_LENGTH + 1];
     if (hash256_string((const unsigned char *)buffer_tostring(alarms_to_hash), len, hash)) {
@@ -1126,6 +1127,7 @@ void aclk_push_alarm_checkpoint(RRDHOST *host __maybe_unused)
         alarm_checkpoint.checksum = (char *)hash;
 
         aclk_send_provide_alarm_checkpoint(&alarm_checkpoint);
+        freez(claim_id);
         log_access("ACLK RES [%s (%s)]: ALERTS CHECKPOINT SENT", wc->node_id, rrdhost_hostname(host));
     } else {
         log_access("ACLK RES [%s (%s)]: FAILED TO CREATE ALERTS CHECKPOINT HASH", wc->node_id, rrdhost_hostname(host));

+ 1 - 1
libnetdata/libnetdata.c

@@ -2031,6 +2031,6 @@ int hash256_string(const unsigned char *string, size_t size, char *hash) {
         EVP_MD_CTX_destroy(ctx);
         return 0;
     }
-
+    EVP_MD_CTX_destroy(ctx);
     return 1;
 }