diff options
author | jhaslam <none@none> | 2008-02-07 06:05:33 -0800 |
---|---|---|
committer | jhaslam <none@none> | 2008-02-07 06:05:33 -0800 |
commit | 6e0bee749e9081c846d305caa233c222da771831 (patch) | |
tree | 2b80fafadb23a6c6e046538da071ce8a2e3297b2 /usr/src/lib/libdtrace/common/dt_pid.c | |
parent | 5bd0e5515c0fb3ef06efffdeec87dca8a69b392b (diff) | |
download | illumos-joyent-6e0bee749e9081c846d305caa233c222da771831.tar.gz |
6325485 A stddev() aggregator would be a nice adjunct to avg()
6618705 p*d123 doesn't cause pid probes to be created
6624541 dtrace aggregations should assume signed arguments
Contributed by Chad Mynhier <cmynhier@gmail.com>.
Diffstat (limited to 'usr/src/lib/libdtrace/common/dt_pid.c')
-rw-r--r-- | usr/src/lib/libdtrace/common/dt_pid.c | 34 |
1 files changed, 22 insertions, 12 deletions
diff --git a/usr/src/lib/libdtrace/common/dt_pid.c b/usr/src/lib/libdtrace/common/dt_pid.c index f16e742cdd..6346329339 100644 --- a/usr/src/lib/libdtrace/common/dt_pid.c +++ b/usr/src/lib/libdtrace/common/dt_pid.c @@ -20,7 +20,7 @@ */ /* - * Copyright 2007 Sun Microsystems, Inc. All rights reserved. + * Copyright 2008 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ @@ -655,7 +655,7 @@ dt_pid_create_probes(dtrace_probedesc_t *pdp, dtrace_hdl_t *dtp, dt_pcb_t *pcb) (void) snprintf(provname, sizeof (provname), "pid%d", (int)pid); - if (strcmp(provname, pdp->dtpd_provider) == 0) { + if (gmatch(provname, pdp->dtpd_provider) != 0) { if ((P = dt_proc_grab(dtp, pid, PGRAB_RDONLY | PGRAB_FORCE, 0)) == NULL) { (void) dt_pid_error(dtp, pcb, NULL, NULL, D_PROC_GRAB, @@ -671,8 +671,12 @@ dt_pid_create_probes(dtrace_probedesc_t *pdp, dtrace_hdl_t *dtp, dt_pcb_t *pcb) (void) pthread_mutex_unlock(&dpr->dpr_lock); dt_proc_release(dtp, P); + } - } else { + /* + * If it's not strictly a pid provider, we might match a USDT provider. + */ + if (strcmp(provname, pdp->dtpd_provider) != 0) { if ((P = dt_proc_grab(dtp, pid, 0, 1)) == NULL) { (void) dt_pid_error(dtp, pcb, NULL, NULL, D_PROC_GRAB, "failed to grab process %d", (int)pid); @@ -703,6 +707,10 @@ dt_pid_create_probes_module(dtrace_hdl_t *dtp, dt_proc_t *dpr) dtrace_probedesc_t *pdp, pd; pid_t pid; int ret = 0, found = B_FALSE; + char provname[DTRACE_PROVNAMELEN]; + + (void) snprintf(provname, sizeof (provname), "pid%d", + (int)dpr->dpr_pid); for (pgp = dt_list_next(&dtp->dt_programs); pgp != NULL; pgp = dt_list_next(pgp)) { @@ -719,15 +727,17 @@ dt_pid_create_probes_module(dtrace_hdl_t *dtp, dt_proc_t *dpr) pd = *pdp; - if (strncmp(pdp->dtpd_provider, "pid", 3) == 0) { - if (dt_pid_create_pid_probes(&pd, dtp, NULL, - dpr) != 0) - ret = 1; - } else { - if (dt_pid_create_usdt_probes(&pd, dtp, NULL, - dpr) != 0) - ret = 1; - } + if (gmatch(provname, pdp->dtpd_provider) != 0 && + dt_pid_create_pid_probes(&pd, dtp, NULL, dpr) != 0) + ret = 1; + + /* + * If it's not strictly a pid provider, we might match + * a USDT provider. + */ + if (strcmp(provname, pdp->dtpd_provider) != 0 && + dt_pid_create_usdt_probes(&pd, dtp, NULL, dpr) != 0) + ret = 1; } } |