[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