[DTrace-devel] [PATCH] probe: only detach probes that got attached

Kris Van Hees kris.van.hees at oracle.com
Mon Apr 15 16:07:04 UTC 2024


The dt_probe_detach() function was calling the detach hook in every
probe rather than only those that got attached.

Signed-off-by: Kris Van Hees <kris.van.hees at oracle.com>
---
 libdtrace/dt_open.c  |  2 +-
 libdtrace/dt_probe.c | 12 ++++--------
 libdtrace/dt_probe.h |  2 +-
 3 files changed, 6 insertions(+), 10 deletions(-)

diff --git a/libdtrace/dt_open.c b/libdtrace/dt_open.c
index 3bc90cf5..8c3d3133 100644
--- a/libdtrace/dt_open.c
+++ b/libdtrace/dt_open.c
@@ -1235,7 +1235,7 @@ dtrace_close(dtrace_hdl_t *dtp)
 	if (dtp == NULL)
 		return;
 
-	dt_probe_detach(dtp);
+	dt_probe_detach_all(dtp);
 
 	dt_free(dtp, dtp->dt_conf.cpus);
 
diff --git a/libdtrace/dt_probe.c b/libdtrace/dt_probe.c
index c0273169..4f8730b9 100644
--- a/libdtrace/dt_probe.c
+++ b/libdtrace/dt_probe.c
@@ -1441,16 +1441,12 @@ dt_probe_init(dtrace_hdl_t *dtp)
 }
 
 void
-dt_probe_detach(dtrace_hdl_t *dtp)
+dt_probe_detach_all(dtrace_hdl_t *dtp)
 {
-	uint32_t	i;
-
-	for (i = 0; i < dtp->dt_probes_sz; i++) {
-		dt_probe_t	*prp = dtp->dt_probes[i];
-
-		if (prp == NULL)
-			continue;
+	dt_probe_t	*prp;
 
+	for (prp = dt_list_next(&dtp->dt_enablings); prp != NULL;
+	     prp = dt_list_next(prp)) {
 		if (prp->prov && prp->prov->impl && prp->prov->impl->detach)
 			prp->prov->impl->detach(dtp, prp);
 	}
diff --git a/libdtrace/dt_probe.h b/libdtrace/dt_probe.h
index 0dae2ae0..0411be1e 100644
--- a/libdtrace/dt_probe.h
+++ b/libdtrace/dt_probe.h
@@ -100,7 +100,7 @@ extern int dt_probe_dependent_iter(dtrace_hdl_t *dtp, const dt_probe_t *prp,
 
 
 extern void dt_probe_init(dtrace_hdl_t *dtp);
-extern void dt_probe_detach(dtrace_hdl_t *dtp);
+extern void dt_probe_detach_all(dtrace_hdl_t *dtp);
 extern void dt_probe_fini(dtrace_hdl_t *dtp);
 extern void dt_probe_stats(dtrace_hdl_t *dtp);
 
-- 
2.42.0




More information about the DTrace-devel mailing list