[DTrace-devel] [PATCH 05/20] Put probe enabling into its own function
Eugene Loh
eugene.loh at oracle.com
Wed Jun 2 11:28:38 PDT 2021
Reviewed-by: Eugene Loh <eugene.loh at oracle.com>
On 6/2/21 1:47 AM, Kris Van Hees wrote:
> 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);
> }
>
> /*
More information about the DTrace-devel
mailing list