[DTrace-devel] [PATCH] cpc: Add a destroy function

eugene.loh at oracle.com eugene.loh at oracle.com
Fri May 19 18:58:17 UTC 2023


From: Eugene Loh <eugene.loh at oracle.com>

Signed-off-by: Eugene Loh <eugene.loh at oracle.com>
---
 libdtrace/dt_prov_cpc.c | 21 ++++++++++++++++-----
 1 file changed, 16 insertions(+), 5 deletions(-)

diff --git a/libdtrace/dt_prov_cpc.c b/libdtrace/dt_prov_cpc.c
index d65ba6b6..fc4bb43b 100644
--- a/libdtrace/dt_prov_cpc.c
+++ b/libdtrace/dt_prov_cpc.c
@@ -199,11 +199,6 @@ static int populate(dtrace_hdl_t *dtp)
 			 *   - silently skip over this probe (causing later more controlled failure)
 			 *   - somehow emit a diagnostic message
 			 * For now, we just choose the middle option.
-			 *
-			 * FIXME: Memory pointed to by next_probe_map, pfmname, and Dname
-			 * should ideally be freed explicitly during some probe_destroy(),
-			 * but this is a low priority since all such memory will be freed
-			 * anyhow when the DTrace session ends.
 			 */
 			next_probe_map = dt_zalloc(dtp, sizeof(cpc_probe_map_t));
 			if (next_probe_map == NULL)
@@ -480,6 +475,21 @@ static void probe_destroy(dtrace_hdl_t *dtp, void *arg)
 	dt_free(dtp, datap);
 }
 
+static void destroy(dtrace_hdl_t *dtp, void *arg)
+{
+	cpc_probe_map_t *probe_map;
+	cpc_probe_map_t *next_probe_map;
+
+	for (probe_map = dt_list_next(arg); probe_map;
+	     probe_map = next_probe_map) {
+		free(probe_map->Dname);
+		free(probe_map->pfmname);
+		next_probe_map = dt_list_next(probe_map);
+		dt_free(dtp, probe_map);
+	}
+	dt_free(dtp, arg);
+}
+
 dt_provimpl_t	dt_cpc = {
 	.name		= prvname,
 	.prog_type	= BPF_PROG_TYPE_PERF_EVENT,
@@ -490,4 +500,5 @@ dt_provimpl_t	dt_cpc = {
 	.probe_info	= &probe_info,
 	.detach		= &detach,
 	.probe_destroy	= &probe_destroy,
+	.destroy	= &destroy,
 };
-- 
2.18.4




More information about the DTrace-devel mailing list