File pacemaker#3380-0001-Low-libcrmcommon-Free-text-curses-private-list-data.patch of Package pacemaker.34782
From 8792c1f59fe9ac41dbd621b47e488f0ec9f612dc Mon Sep 17 00:00:00 2001
From: Chris Lumens <clumens@redhat.com>
Date: Thu, 29 Feb 2024 16:29:02 -0500
Subject: [PATCH 1/3] Low: libcrmcommon: Free text/curses private list data.
Whenever we're done with the private list data in the text and curses
formatters, make sure to clean it up. Typically, this should just be
when end_list is called. However, if for some reason the program ends
before everything that was pushed into the queue is popped with
end_list, also clean up there too.
Ref T704
---
lib/common/output_text.c | 12 ++++++++++--
tools/crm_mon_curses.c | 12 ++++++++++--
2 files changed, 20 insertions(+), 4 deletions(-)
Index: pacemaker-2.1.2+20211124.ada5c3b36/lib/common/output_text.c
===================================================================
--- pacemaker-2.1.2+20211124.ada5c3b36.orig/lib/common/output_text.c
+++ pacemaker-2.1.2+20211124.ada5c3b36/lib/common/output_text.c
@@ -35,6 +35,14 @@ typedef struct private_data_s {
} private_data_t;
static void
+free_list_data(gpointer data) {
+ text_list_data_t *list_data = data;
+
+ free(list_data->singular_noun);
+ free(list_data->plural_noun);
+}
+
+static void
text_free_priv(pcmk__output_t *out) {
private_data_t *priv = out->priv;
@@ -42,7 +50,7 @@ text_free_priv(pcmk__output_t *out) {
return;
}
- g_queue_free(priv->parent_q);
+ g_queue_free_full(priv->parent_q, free_list_data);
free(priv);
out->priv = NULL;
}
@@ -255,7 +263,7 @@ text_end_list(pcmk__output_t *out) {
}
}
- free(node);
+ free_list_data(node);
}
static bool
Index: pacemaker-2.1.2+20211124.ada5c3b36/tools/crm_mon_curses.c
===================================================================
--- pacemaker-2.1.2+20211124.ada5c3b36.orig/tools/crm_mon_curses.c
+++ pacemaker-2.1.2+20211124.ada5c3b36/tools/crm_mon_curses.c
@@ -36,6 +36,14 @@ typedef struct private_data_s {
} private_data_t;
static void
+free_list_data(gpointer data) {
+ curses_list_data_t *list_data = data;
+
+ free(list_data->singular_noun);
+ free(list_data->plural_noun);
+}
+
+static void
curses_free_priv(pcmk__output_t *out) {
private_data_t *priv = out->priv;
@@ -43,7 +51,7 @@ curses_free_priv(pcmk__output_t *out) {
return;
}
- g_queue_free(priv->parent_q);
+ g_queue_free_full(priv->parent_q, free_list_data);
free(priv);
out->priv = NULL;
}
@@ -261,7 +269,7 @@ curses_end_list(pcmk__output_t *out) {
}
}
- free(node);
+ free_list_data(node);
}
static bool