[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