Skip to content

Commit

Permalink
Put probe enabling into its own function
Browse files Browse the repository at this point in the history
Probes were being added to the enablings list from multiple locations
in the source code.  This patch introduces dt_probe_enable()  to
perform this functionality.  This will make it easier to add any
functionality to the enabling process in the future.

Signed-off-by: Kris Van Hees <kris.van.hees@oracle.com>
Reviewed-by: Eugene Loh <eugene.loh@oracle.com>
  • Loading branch information
kvanhees committed Jun 18, 2021
1 parent 1c61085 commit a73bd1b
Show file tree
Hide file tree
Showing 5 changed files with 18 additions and 15 deletions.
11 changes: 11 additions & 0 deletions libdtrace/dt_probe.c
Original file line number Diff line number Diff line change
Expand Up @@ -443,6 +443,17 @@ dt_probe_declare(dt_provider_t *pvp, dt_probe_t *prp)
dt_idhash_xinsert(pvp->pv_probes, prp->pr_ident);
}

void
dt_probe_enable(dtrace_hdl_t *dtp, dt_probe_t *prp)
{
assert(prp->prov->impl != NULL);
if (prp->prov->impl->enable == NULL) {
if (!dt_in_list(&dtp->dt_enablings, prp))
dt_list_append(&dtp->dt_enablings, prp);
} else
prp->prov->impl->enable(dtp, prp);
}

void
dt_probe_destroy(dt_probe_t *prp)
{
Expand Down
1 change: 1 addition & 0 deletions libdtrace/dt_probe.h
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ extern dt_probe_t *dt_probe_info(dtrace_hdl_t *,
const dtrace_probedesc_t *, dtrace_probeinfo_t *);

extern void dt_probe_declare(dt_provider_t *, dt_probe_t *);
extern void dt_probe_enable(dtrace_hdl_t *dtp, dt_probe_t *prp);
extern void dt_probe_destroy(dt_probe_t *);

extern int dt_probe_define(dt_provider_t *, dt_probe_t *,
Expand Down
8 changes: 1 addition & 7 deletions libdtrace/dt_program.c
Original file line number Diff line number Diff line change
Expand Up @@ -149,13 +149,7 @@ dt_stmt_probe(dtrace_hdl_t *dtp, dt_probe_t *prp, pi_state_t *st)
dtrace_probeinfo_t p;

dt_probe_info(dtp, prp->desc, &p);

assert(prp->prov->impl != NULL);
if (prp->prov->impl->enable == NULL) {
if (!dt_in_list(&dtp->dt_enablings, prp))
dt_list_append(&dtp->dt_enablings, prp);
} else
prp->prov->impl->enable(dtp, prp);
dt_probe_enable(dtp, prp);

dt_probe_add_clause(dtp, prp, st->idp);
(*st->cnt)++;
Expand Down
6 changes: 3 additions & 3 deletions libdtrace/dt_prov_dtrace.c
Original file line number Diff line number Diff line change
Expand Up @@ -46,19 +46,19 @@ static int populate(dtrace_hdl_t *dtp)
prp = dt_tp_probe_insert(dtp, prv, prvname, modname, funname, "BEGIN");
if (prp) {
n++;
dt_list_append(&dtp->dt_enablings, prp);
dt_probe_enable(dtp, prp);
}

prp = dt_tp_probe_insert(dtp, prv, prvname, modname, funname, "END");
if (prp) {
n++;
dt_list_append(&dtp->dt_enablings, prp);
dt_probe_enable(dtp, prp);
}

prp = dt_tp_probe_insert(dtp, prv, prvname, modname, funname, "ERROR");
if (prp) {
n++;
dt_list_append(&dtp->dt_enablings, prp);
dt_probe_enable(dtp, prp);
dtp->dt_error = prp;
}

Expand Down
7 changes: 2 additions & 5 deletions libdtrace/dt_prov_pid.c
Original file line number Diff line number Diff line change
Expand Up @@ -179,11 +179,8 @@ static void enable(dtrace_hdl_t *dtp, dt_probe_t *prp)
{
assert(prp->prov->impl == &dt_pid_proc);

/* We should enable the main (real) probe (if not enabled yet). */
prp = prp->prv_data;

if (!dt_in_list(&dtp->dt_enablings, prp))
dt_list_append(&dtp->dt_enablings, prp);
/* We need to enable the main (real) probe (if not enabled yet). */
dt_probe_enable(dtp, (dt_probe_t *)prp->prv_data);
}

/*
Expand Down

0 comments on commit a73bd1b

Please sign in to comment.