[DTrace-devel] [PATCH 3/5] usdt: provide probes properly when >1 is specified
Kris Van Hees
kris.van.hees at oracle.com
Sat May 13 06:41:36 UTC 2023
On Mon, Apr 24, 2023 at 08:08:14PM +0100, Nick Alcock via DTrace-devel wrote:
> dt_pid_create_usdt_probes is called by dt_pid_create_probes, which
> despite its name is usually called by the compiler to set the context
> for one probe at a time, not all at once. So dt_pid_create_usdt_probes
> is usually (currently: always) called in a mode in which it scans all
> the probes and then creates only those it has been asked to create.
> So we really do need to not skip invocations after the first.
>
> This will obviously not work well for wildcard probe handling, but for
> now the inefficient approach of just repeated rescanning should work
> well enough.
>
> Signed-off-by: Nick Alcock <nick.alcock at oracle.com>
Reviewed-by: Kris Van Hees <kris.van.hees at oracle.com>
> ---
> libdtrace/dt_pid.c | 7 +++----
> libdtrace/dt_proc.h | 1 -
> test/unittest/usdt/tst.allargs.sh | 2 --
> 3 files changed, 3 insertions(+), 7 deletions(-)
>
> diff --git a/libdtrace/dt_pid.c b/libdtrace/dt_pid.c
> index 06bd7a4dd24aa..4be230ace1bf8 100644
> --- a/libdtrace/dt_pid.c
> +++ b/libdtrace/dt_pid.c
> @@ -742,6 +742,8 @@ dt_pid_create_usdt_probes(dtrace_hdl_t *dtp, dt_proc_t *dpr,
> * probe: we'll complain later if we use it for anything.
> */
>
> + dt_dprintf("providing %s:%s:%s:%s\n", pdp->prv, pdp->mod,
> + pdp->fun, pdp->prb);
> if (pvp->impl->provide_probe(dtp, &psp) < 0 && pdp) {
> dt_pid_error(dtp, pcb, dpr, D_PROC_USDT,
> "failed to instantiate %sprobe %s for pid %d: %s",
> @@ -921,10 +923,7 @@ dt_pid_create_probes(dtrace_probedesc_t *pdp, dtrace_hdl_t *dtp, dt_pcb_t *pcb)
> dpr = dt_proc_lookup(dtp, pid);
> assert(dpr != NULL);
>
> - if (!dpr->dpr_usdt) {
> - err = dt_pid_create_usdt_probes(dtp, dpr, pdp, pcb);
> - dpr->dpr_usdt = B_TRUE;
> - }
> + err = dt_pid_create_usdt_probes(dtp, dpr, pdp, pcb);
>
> dt_proc_release_unlock(dtp, pid);
> }
> diff --git a/libdtrace/dt_proc.h b/libdtrace/dt_proc.h
> index 2b4f4d0f03cf0..0ec1caf08fbfa 100644
> --- a/libdtrace/dt_proc.h
> +++ b/libdtrace/dt_proc.h
> @@ -39,7 +39,6 @@ typedef struct dt_proc {
> uint_t dpr_refs; /* reference count */
> uint8_t dpr_stop; /* stop mask: see flag bits below */
> uint8_t dpr_done; /* done flag: ctl thread has exited */
> - uint8_t dpr_usdt; /* usdt flag: usdt initialized */
> uint8_t dpr_created; /* proc flag: true if we created this
> process, false if we grabbed it */
> uint8_t dpr_monitoring; /* true if we should background-monitor
> diff --git a/test/unittest/usdt/tst.allargs.sh b/test/unittest/usdt/tst.allargs.sh
> index f0484793206f7..20f9de900b5ad 100755
> --- a/test/unittest/usdt/tst.allargs.sh
> +++ b/test/unittest/usdt/tst.allargs.sh
> @@ -4,8 +4,6 @@
> # Copyright (c) 2018, 2020, Oracle and/or its affiliates. All rights reserved.
> # Licensed under the Universal Permissive License v 1.0 as shown at
> # http://oss.oracle.com/licenses/upl.
> -#
> -# @@xfail: dtv2
>
> # This test covers all USDT probes fired by the DTRACE_PROBEn macros.
> # Arguments values are checked only for first 10 arguments because
> --
> 2.39.1.268.g9de2f9a303
>
>
> _______________________________________________
> DTrace-devel mailing list
> DTrace-devel at oss.oracle.com
> https://oss.oracle.com/mailman/listinfo/dtrace-devel
More information about the DTrace-devel
mailing list