[DTrace-devel] [PATCH 05/20] Put probe enabling into its own function
Kris Van Hees
kris.van.hees at oracle.com
Tue Jun 1 22:47:47 PDT 2021
Probes were being added to the enablings list from multiple locations
in the source code. This patch introduces dt_probe_enable() to
perform this functionality. This will make it easier to add any
functionality to the enabling process in the future.
Signed-off-by: Kris Van Hees <kris.van.hees at oracle.com>
---
libdtrace/dt_probe.c | 11 +++++++++++
libdtrace/dt_probe.h | 1 +
libdtrace/dt_program.c | 8 +-------
libdtrace/dt_prov_dtrace.c | 6 +++---
libdtrace/dt_prov_pid.c | 7 ++-----
5 files changed, 18 insertions(+), 15 deletions(-)
diff --git a/libdtrace/dt_probe.c b/libdtrace/dt_probe.c
index c8732e9b..2f0a084f 100644
--- a/libdtrace/dt_probe.c
+++ b/libdtrace/dt_probe.c
@@ -443,6 +443,17 @@ dt_probe_declare(dt_provider_t *pvp, dt_probe_t *prp)
dt_idhash_xinsert(pvp->pv_probes, prp->pr_ident);
}
+void
+dt_probe_enable(dtrace_hdl_t *dtp, dt_probe_t *prp)
+{
+ assert(prp->prov->impl != NULL);
+ if (prp->prov->impl->enable == NULL) {
+ if (!dt_in_list(&dtp->dt_enablings, prp))
+ dt_list_append(&dtp->dt_enablings, prp);
+ } else
+ prp->prov->impl->enable(dtp, prp);
+}
+
void
dt_probe_destroy(dt_probe_t *prp)
{
diff --git a/libdtrace/dt_probe.h b/libdtrace/dt_probe.h
index 8991ab2f..6464af55 100644
--- a/libdtrace/dt_probe.h
+++ b/libdtrace/dt_probe.h
@@ -63,6 +63,7 @@ extern dt_probe_t *dt_probe_info(dtrace_hdl_t *,
const dtrace_probedesc_t *, dtrace_probeinfo_t *);
extern void dt_probe_declare(dt_provider_t *, dt_probe_t *);
+extern void dt_probe_enable(dtrace_hdl_t *dtp, dt_probe_t *prp);
extern void dt_probe_destroy(dt_probe_t *);
extern int dt_probe_define(dt_provider_t *, dt_probe_t *,
diff --git a/libdtrace/dt_program.c b/libdtrace/dt_program.c
index 82cbb288..5399ae05 100644
--- a/libdtrace/dt_program.c
+++ b/libdtrace/dt_program.c
@@ -149,13 +149,7 @@ dt_stmt_probe(dtrace_hdl_t *dtp, dt_probe_t *prp, pi_state_t *st)
dtrace_probeinfo_t p;
dt_probe_info(dtp, prp->desc, &p);
-
- assert(prp->prov->impl != NULL);
- if (prp->prov->impl->enable == NULL) {
- if (!dt_in_list(&dtp->dt_enablings, prp))
- dt_list_append(&dtp->dt_enablings, prp);
- } else
- prp->prov->impl->enable(dtp, prp);
+ dt_probe_enable(dtp, prp);
dt_probe_add_clause(dtp, prp, st->idp);
(*st->cnt)++;
diff --git a/libdtrace/dt_prov_dtrace.c b/libdtrace/dt_prov_dtrace.c
index 3e0bb3f1..1c40c233 100644
--- a/libdtrace/dt_prov_dtrace.c
+++ b/libdtrace/dt_prov_dtrace.c
@@ -46,19 +46,19 @@ static int populate(dtrace_hdl_t *dtp)
prp = dt_tp_probe_insert(dtp, prv, prvname, modname, funname, "BEGIN");
if (prp) {
n++;
- dt_list_append(&dtp->dt_enablings, prp);
+ dt_probe_enable(dtp, prp);
}
prp = dt_tp_probe_insert(dtp, prv, prvname, modname, funname, "END");
if (prp) {
n++;
- dt_list_append(&dtp->dt_enablings, prp);
+ dt_probe_enable(dtp, prp);
}
prp = dt_tp_probe_insert(dtp, prv, prvname, modname, funname, "ERROR");
if (prp) {
n++;
- dt_list_append(&dtp->dt_enablings, prp);
+ dt_probe_enable(dtp, prp);
dtp->dt_error = prp;
}
diff --git a/libdtrace/dt_prov_pid.c b/libdtrace/dt_prov_pid.c
index 5c0345c3..2e9c5bee 100644
--- a/libdtrace/dt_prov_pid.c
+++ b/libdtrace/dt_prov_pid.c
@@ -179,11 +179,8 @@ static void enable(dtrace_hdl_t *dtp, dt_probe_t *prp)
{
assert(prp->prov->impl == &dt_pid_proc);
- /* We should enable the main (real) probe (if not enabled yet). */
- prp = prp->prv_data;
-
- if (!dt_in_list(&dtp->dt_enablings, prp))
- dt_list_append(&dtp->dt_enablings, prp);
+ /* We need to enable the main (real) probe (if not enabled yet). */
+ dt_probe_enable(dtp, (dt_probe_t *)prp->prv_data);
}
/*
--
2.31.1
More information about the DTrace-devel
mailing list