[DTrace-devel] [PATCH] probe: ensure probe argument info is retrieved only once per probe
Kris Van Hees
kris.van.hees at oracle.com
Thu Feb 16 15:54:30 UTC 2023
Throughout the compilation process there are multiple points where
probe argument information is requested from the providers. This
data cannot change during a runtime of DTrace and there is therefore
no reason to go through the process of retrieving it more than once.
The prp->argc (probe argument count) is used to determine if argument
data has been obtained. It is initially -1, and will be 0 or greater
once argument data has been requested.
Signed-off-by: Kris Van Hees <kris.van.hees at oracle.com>
---
libdtrace/dt_probe.c | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/libdtrace/dt_probe.c b/libdtrace/dt_probe.c
index 3594097e..58b26836 100644
--- a/libdtrace/dt_probe.c
+++ b/libdtrace/dt_probe.c
@@ -695,6 +695,7 @@ dt_probe_insert(dtrace_hdl_t *dtp, dt_provider_t *prov, const char *prv,
prp->desc = desc;
prp->prov = prov;
prp->prv_data = datap;
+ prp->argc = -1;
dt_htab_insert(dtp->dt_byprv, prp);
dt_htab_insert(dtp->dt_bymod, prp);
@@ -865,13 +866,18 @@ dt_probe_args_info(dtrace_hdl_t *dtp, dt_probe_t *prp)
int i, nc, xc;
dtrace_typeinfo_t dtt;
+ /* Only retrieve probe argument information once per probe. */
+ if (prp->argc != -1)
+ return;
if (!prp->prov->impl->probe_info)
return;
if (prp->prov->impl->probe_info(dtp, prp, &argc, &argv) < 0)
return;
- if (!argc || !argv)
+ if (!argc || !argv) {
+ prp->argc = 0;
return;
+ }
nc = 0;
for (xc = 0; xc < argc; xc++)
--
2.39.1
More information about the DTrace-devel
mailing list