[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