[DTrace-devel] [PATCH 1/5 v2] Change use of dtrace_probe_iter()
eugene.loh at oracle.com
eugene.loh at oracle.com
Tue Jun 16 20:04:24 PDT 2020
From: Eugene Loh <eugene.loh at oracle.com>
In DTrace v1, dtrace_probe_iter() was used to iterate over probes,
using dt_probe_iter() as a callback function.
In the current release, dtrace_probe_iter() will be used as an external
API, with dt_probe_iter() the "internal" (to libdtrace) interface.
Signed-off-by: Eugene Loh <eugene.loh at oracle.com>
---
libdtrace/dt_probe.c | 26 +++++++++-----------------
1 file changed, 9 insertions(+), 17 deletions(-)
diff --git a/libdtrace/dt_probe.c b/libdtrace/dt_probe.c
index b6c79354..46c47fbe 100644
--- a/libdtrace/dt_probe.c
+++ b/libdtrace/dt_probe.c
@@ -960,10 +960,10 @@ dt_probe_args_info(dtrace_hdl_t *dtp, dt_probe_t *prp)
/*ARGSUSED*/
static int
-dt_probe_desc(dtrace_hdl_t *dtp, const dtrace_probedesc_t *pdp, void *arg)
+dt_probe_representative(dtrace_hdl_t *dtp, const dt_probe_t *prp, void *arg)
{
- if (((dtrace_probedesc_t *)arg)->id == DTRACE_IDNONE) {
- memcpy(arg, pdp, sizeof (dtrace_probedesc_t));
+ if (*((dt_probe_t **)arg) == NULL) {
+ *((dt_probe_t **)arg) = prp;
return (0);
}
@@ -982,24 +982,20 @@ dt_probe_info(dtrace_hdl_t *dtp, const dtrace_probedesc_t *pdp,
dt_probe_t *prp = NULL;
const dtrace_pattr_t *pap;
dt_provider_t *pvp;
- dtrace_probedesc_t pd;
int m;
- memset(&pd, 0, sizeof (pd));
- pd.id = DTRACE_IDNONE;
-
/*
- * Call dtrace_probe_iter() to find matching probes. Our
+ * Call dt_probe_iter() to find matching probes. Our
* dt_probe_desc() callback will produce the following results:
*
- * m < 0 dtrace_probe_iter() found zero matches (or failed).
- * m > 0 dtrace_probe_iter() found more than one match.
- * m = 0 dtrace_probe_iter() found exactly one match.
+ * m < 0 dt_probe_iter() found zero matches (or failed).
+ * m > 0 dt_probe_iter() found more than one match.
+ * m = 0 dt_probe_iter() found exactly one match.
*/
- if ((m = dtrace_probe_iter(dtp, pdp, dt_probe_desc, &pd)) < 0)
+ if ((m = dt_probe_iter(dtp, pdp, dt_probe_representative, NULL, &prp)) < 0)
return NULL; /* dt_errno is set for us */
- if ((pvp = dt_provider_lookup(dtp, pd.prv)) == NULL)
+ if ((pvp = prp->prov) == NULL)
return NULL; /* dt_errno is set for us */
/*
@@ -1043,10 +1039,6 @@ dt_probe_info(dtrace_hdl_t *dtp, const dtrace_probedesc_t *pdp,
}
}
- prp = dt_probe_lookup(dtp, &pd);
- if (!prp)
- return NULL; /* dt_errno is set for us */
-
/*
* Compute the probe description attributes by taking the minimum of
* the attributes of the specified fields. If no provider is specified
--
2.18.2
More information about the DTrace-devel
mailing list