summaryrefslogtreecommitdiff
path: root/usr/src/lib/libdtrace/common/dt_work.c
diff options
context:
space:
mode:
authorahl <none@none>2006-02-08 10:03:09 -0800
committerahl <none@none>2006-02-08 10:03:09 -0800
commit900524f30cbbebc670e146a87587f355b9f633ee (patch)
tree81a3f2e4cc774c698d8a4880e5c6d3098bcd5b28 /usr/src/lib/libdtrace/common/dt_work.c
parentc877ffe618c3f6a0f995ed6b3d5feed148e6d49f (diff)
downloadillumos-gate-900524f30cbbebc670e146a87587f355b9f633ee.tar.gz
4864945 spelling error in usage message
6299947 ustack() needs to ignore the top 32 bits for 32-bit processes 6305794 libdtrace misses rtld notifications 6309681 USDT headergen 6349088 dtrace command, Assertion failed: dpr->dpr_refs != 0, file ../common/dt_proc.c, line 976 6375841 USDT providers shouldn't be allowed to end in a digit --HG-- rename : usr/src/cmd/abi/apptrace/amd64/Makefile => deleted_files/usr/src/cmd/abi/apptrace/amd64/Makefile
Diffstat (limited to 'usr/src/lib/libdtrace/common/dt_work.c')
-rw-r--r--usr/src/lib/libdtrace/common/dt_work.c21
1 files changed, 14 insertions, 7 deletions
diff --git a/usr/src/lib/libdtrace/common/dt_work.c b/usr/src/lib/libdtrace/common/dt_work.c
index 64cc8ff176..97a7f62d69 100644
--- a/usr/src/lib/libdtrace/common/dt_work.c
+++ b/usr/src/lib/libdtrace/common/dt_work.c
@@ -19,8 +19,9 @@
*
* CDDL HEADER END
*/
+
/*
- * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -47,7 +48,7 @@ dtrace_sleep(dtrace_hdl_t *dtp)
{
dt_proc_hash_t *dph = dtp->dt_procs;
dtrace_optval_t policy = dtp->dt_options[DTRACEOPT_BUFPOLICY];
- dt_proc_t *dpr;
+ dt_proc_notify_t *dprn;
hrtime_t earliest = INT64_MAX;
struct timespec tv;
@@ -91,12 +92,18 @@ dtrace_sleep(dtrace_hdl_t *dtp)
*/
(void) pthread_cond_reltimedwait_np(&dph->dph_cv, &dph->dph_lock, &tv);
- while ((dpr = dph->dph_notify) != NULL) {
- dph->dph_notify = dpr->dpr_notify;
- dpr->dpr_notify = NULL;
+ while ((dprn = dph->dph_notify) != NULL) {
+ if (dtp->dt_prochdlr != NULL) {
+ char *err = dprn->dprn_errmsg;
+ if (*err == '\0')
+ err = NULL;
+
+ dtp->dt_prochdlr(dprn->dprn_dpr->dpr_proc, err,
+ dtp->dt_procarg);
+ }
- if (dtp->dt_prochdlr != NULL)
- dtp->dt_prochdlr(dpr->dpr_proc, dtp->dt_procarg);
+ dph->dph_notify = dprn->dprn_next;
+ dt_free(dtp, dprn);
}
(void) pthread_mutex_unlock(&dph->dph_lock);