[DTrace-devel] [PATCH 05/19] Add flag to dt_pid_create_probes()
eugene.loh at oracle.com
eugene.loh at oracle.com
Thu Aug 29 05:25:44 UTC 2024
From: Eugene Loh <eugene.loh at oracle.com>
The function dt_pid_create_probes() creates both pid and usdt probes.
Once the dtrace session has started, however, we only need to watch
for new usdt probes. So add a usdt_only argument to the function.
Signed-off-by: Eugene Loh <eugene.loh at oracle.com>
---
libdtrace/dt_cc.c | 2 +-
libdtrace/dt_pid.c | 4 ++--
libdtrace/dt_pid.h | 3 +--
3 files changed, 4 insertions(+), 5 deletions(-)
diff --git a/libdtrace/dt_cc.c b/libdtrace/dt_cc.c
index e66d76fb..cfd4d3d1 100644
--- a/libdtrace/dt_cc.c
+++ b/libdtrace/dt_cc.c
@@ -282,7 +282,7 @@ dt_setcontext(dtrace_hdl_t *dtp, const dtrace_probedesc_t *pdp)
isdigit(pdp->prv[strlen(pdp->prv) - 1]) &&
((pvp = dt_provider_lookup(dtp, pdp->prv)) == NULL ||
pvp->pv_flags & DT_PROVIDER_PID) &&
- dt_pid_create_probes((dtrace_probedesc_t *)pdp, dtp, yypcb) != 0) {
+ dt_pid_create_probes((dtrace_probedesc_t *)pdp, dtp, yypcb, 0) != 0) {
longjmp(yypcb->pcb_jmpbuf, EDT_COMPILER);
}
diff --git a/libdtrace/dt_pid.c b/libdtrace/dt_pid.c
index 996543b1..3f3453af 100644
--- a/libdtrace/dt_pid.c
+++ b/libdtrace/dt_pid.c
@@ -1095,7 +1095,7 @@ dt_pid_get_pid(const dtrace_probedesc_t *pdp, dtrace_hdl_t *dtp, dt_pcb_t *pcb,
}
int
-dt_pid_create_probes(dtrace_probedesc_t *pdp, dtrace_hdl_t *dtp, dt_pcb_t *pcb)
+dt_pid_create_probes(dtrace_probedesc_t *pdp, dtrace_hdl_t *dtp, dt_pcb_t *pcb, int usdt_only)
{
char provname[DTRACE_PROVNAMELEN];
dt_proc_t *dpr;
@@ -1109,7 +1109,7 @@ dt_pid_create_probes(dtrace_probedesc_t *pdp, dtrace_hdl_t *dtp, dt_pcb_t *pcb)
snprintf(provname, sizeof(provname), "pid%d", (int)pid);
- if (gmatch(provname, pdp->prv) != 0) {
+ if ((usdt_only == 0) && gmatch(provname, pdp->prv) != 0) {
if (dt_proc_grab_lock(dtp, pid, DTRACE_PROC_WAITING) < 0) {
dt_pid_error(dtp, pcb, NULL, D_PROC_GRAB,
"failed to grab process %d", (int)pid);
diff --git a/libdtrace/dt_pid.h b/libdtrace/dt_pid.h
index 497c7751..dc200f4d 100644
--- a/libdtrace/dt_pid.h
+++ b/libdtrace/dt_pid.h
@@ -16,8 +16,7 @@
extern "C" {
#endif
-extern int dt_pid_create_probes(dtrace_probedesc_t *, dtrace_hdl_t *,
- dt_pcb_t *);
+extern int dt_pid_create_probes(dtrace_probedesc_t *, dtrace_hdl_t *, dt_pcb_t *, int);
extern int dt_pid_create_probes_module(dtrace_hdl_t *, dt_proc_t *);
extern pid_t dt_pid_get_pid(const dtrace_probedesc_t *, dtrace_hdl_t *, dt_pcb_t *,
dt_proc_t *);
--
2.43.5
More information about the DTrace-devel
mailing list