v9-0009-Add-simple_ptr_list_destroy-and-simple_ptr_list_d.patch
application/x-patch
Filename: v9-0009-Add-simple_ptr_list_destroy-and-simple_ptr_list_d.patch
Type: application/x-patch
Part: 4
Patch
Format: format-patch
Series: patch v9-0009
Subject: Add simple_ptr_list_destroy() and simple_ptr_list_destroy_deep() API.
| File | + | − |
|---|---|---|
| src/fe_utils/simple_list.c | 39 | 0 |
| src/include/fe_utils/simple_list.h | 2 | 0 |
From 18887cb590f950cdbc7f4e5bc11812f4e85ccfdd Mon Sep 17 00:00:00 2001
From: Amul Sul <amul.sul@enterprisedb.com>
Date: Thu, 8 Aug 2024 16:01:33 +0530
Subject: [PATCH v9 09/12] Add simple_ptr_list_destroy() and
simple_ptr_list_destroy_deep() API.
We didn't have any helper function to destroy SimplePtrList, likely
because it wasn't needed before, but it's required in a later patch in
this set. I've added two functions for this purpose, inspired by
list_free() and list_free_deep().
---
src/fe_utils/simple_list.c | 39 ++++++++++++++++++++++++++++++
src/include/fe_utils/simple_list.h | 2 ++
2 files changed, 41 insertions(+)
diff --git a/src/fe_utils/simple_list.c b/src/fe_utils/simple_list.c
index 2d88eb54067..9d218911c31 100644
--- a/src/fe_utils/simple_list.c
+++ b/src/fe_utils/simple_list.c
@@ -173,3 +173,42 @@ simple_ptr_list_append(SimplePtrList *list, void *ptr)
list->head = cell;
list->tail = cell;
}
+
+/*
+ * Destroy a pointer list and optionally the pointed-to element
+ */
+static void
+simple_ptr_list_destroy_private(SimplePtrList *list, bool deep)
+{
+ SimplePtrListCell *cell;
+
+ cell = list->head;
+ while (cell != NULL)
+ {
+ SimplePtrListCell *next;
+
+ next = cell->next;
+ if (deep)
+ pg_free(cell->ptr);
+ pg_free(cell);
+ cell = next;
+ }
+}
+
+/*
+ * Destroy a pointer list and the pointed-to element
+ */
+void
+simple_ptr_list_destroy_deep(SimplePtrList *list)
+{
+ simple_ptr_list_destroy_private(list, true);
+}
+
+/*
+ * Destroy only pointer list and not the pointed-to element
+ */
+void
+simple_ptr_list_destroy(SimplePtrList *list)
+{
+ simple_ptr_list_destroy_private(list, false);
+}
diff --git a/src/include/fe_utils/simple_list.h b/src/include/fe_utils/simple_list.h
index d42ecded8ed..5b7cbec8a62 100644
--- a/src/include/fe_utils/simple_list.h
+++ b/src/include/fe_utils/simple_list.h
@@ -66,5 +66,7 @@ extern void simple_string_list_destroy(SimpleStringList *list);
extern const char *simple_string_list_not_touched(SimpleStringList *list);
extern void simple_ptr_list_append(SimplePtrList *list, void *ptr);
+extern void simple_ptr_list_destroy_deep(SimplePtrList *list);
+extern void simple_ptr_list_destroy(SimplePtrList *list);
#endif /* SIMPLE_LIST_H */
--
2.18.0