[DTrace-devel] [PATCH 01/12] Change use of dtrace_probe_iter()
eugene.loh at oracle.com
eugene.loh at oracle.com
Sat Jul 11 17:38:25 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 | 30 ++++++++++++------------------
1 file changed, 12 insertions(+), 18 deletions(-)
diff --git a/libdtrace/dt_probe.c b/libdtrace/dt_probe.c
index b6c79354..4068fb83 100644
--- a/libdtrace/dt_probe.c
+++ b/libdtrace/dt_probe.c
@@ -960,10 +960,12 @@ 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_first_match(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));
+ dt_probe_t **prpp = arg;
+
+ if (*prpp == NULL) {
+ *prpp = prp;
return (0);
}
@@ -982,24 +984,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
- * dt_probe_desc() callback will produce the following results:
+ * Call dt_probe_iter() to find matching probes. Our
+ * dt_probe_first_match() 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_first_match, 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 +1041,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