[DTrace-devel] [PATCH 03/15] fix probe lookups mixing static and glob components
Kris Van Hees
kris.van.hees at oracle.com
Thu Feb 23 07:23:50 UTC 2023
Signed-off-by: Kris Van Hees <kris.van.hees at oracle.com>
---
libdtrace/dt_probe.c | 23 ++++++++++++++++-------
1 file changed, 16 insertions(+), 7 deletions(-)
diff --git a/libdtrace/dt_probe.c b/libdtrace/dt_probe.c
index 58b26836..e50fc7ba 100644
--- a/libdtrace/dt_probe.c
+++ b/libdtrace/dt_probe.c
@@ -756,9 +756,10 @@ dt_probe_gmatch(const dt_probe_t *prp, dtrace_probedesc_t *pdp)
dt_probe_t *
dt_probe_lookup(dtrace_hdl_t *dtp, const dtrace_probedesc_t *pdp)
{
- dt_probe_t *prp;
- dt_probe_t tmpl;
- int p_is_glob, m_is_glob, f_is_glob, n_is_glob;
+ dt_probe_t *prp;
+ dt_probe_t tmpl;
+ dtrace_probedesc_t desc;
+ int p_is_glob, m_is_glob, f_is_glob, n_is_glob;
/*
* If a probe id is provided, we can do a direct lookup.
@@ -799,14 +800,22 @@ dt_probe_lookup(dtrace_hdl_t *dtp, const dtrace_probedesc_t *pdp)
* specified as glob patterns (or the empty string), we need to loop
* through all probes and look for a match.
*/
+ desc = *pdp;
+ desc.id = (p_is_glob << 3) | (m_is_glob << 2) | (f_is_glob << 1) |
+ n_is_glob;
+
if (!f_is_glob)
- prp = dt_htab_lookup(dtp->dt_byfun, &tmpl);
+ prp = dt_htab_find(dtp->dt_byfun, &tmpl,
+ (dt_htab_f *)dt_probe_gmatch, &desc);
else if (!n_is_glob)
- prp = dt_htab_lookup(dtp->dt_byprb, &tmpl);
+ prp = dt_htab_find(dtp->dt_byprb, &tmpl,
+ (dt_htab_f *)dt_probe_gmatch, &desc);
else if (!m_is_glob)
- prp = dt_htab_lookup(dtp->dt_bymod, &tmpl);
+ prp = dt_htab_find(dtp->dt_bymod, &tmpl,
+ (dt_htab_f *)dt_probe_gmatch, &desc);
else if (!p_is_glob)
- prp = dt_htab_lookup(dtp->dt_byprv, &tmpl);
+ prp = dt_htab_find(dtp->dt_byprv, &tmpl,
+ (dt_htab_f *)dt_probe_gmatch, &desc);
else {
int i;
dtrace_probedesc_t desc;
--
2.39.1
More information about the DTrace-devel
mailing list