diff options
author | ahl <none@none> | 2007-05-18 10:21:51 -0700 |
---|---|---|
committer | ahl <none@none> | 2007-05-18 10:21:51 -0700 |
commit | dcafa303bc5c0028c4ebf51300caac6e2ea88d74 (patch) | |
tree | c083b9fff44ce3a805be15fd63c8fef863888c2f /usr/src/lib/libdtrace/common/dt_proc.c | |
parent | 45d93f12402acbccc624631396fc3d0f7a2d5f74 (diff) | |
download | illumos-gate-dcafa303bc5c0028c4ebf51300caac6e2ea88d74.tar.gz |
6535590 Pid provider doesn't work with probe "main:entry"
6551723 dtrace's mkdemo.pl causes false positive on inter-workspace wsdiff
6556673 potential deadlock with USDT tear-down and enable
Diffstat (limited to 'usr/src/lib/libdtrace/common/dt_proc.c')
-rw-r--r-- | usr/src/lib/libdtrace/common/dt_proc.c | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/usr/src/lib/libdtrace/common/dt_proc.c b/usr/src/lib/libdtrace/common/dt_proc.c index 3d739a7b06..419f13b847 100644 --- a/usr/src/lib/libdtrace/common/dt_proc.c +++ b/usr/src/lib/libdtrace/common/dt_proc.c @@ -20,7 +20,7 @@ */ /* - * Copyright 2006 Sun Microsystems, Inc. All rights reserved. + * Copyright 2007 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ @@ -162,7 +162,7 @@ dt_proc_bpmatch(dtrace_hdl_t *dtp, dt_proc_t *dpr) (void) Pxecbkpt(dpr->dpr_proc, dbp->dbp_instr); } -void +static void dt_proc_bpenable(dt_proc_t *dpr) { dt_bkpt_t *dbp; @@ -179,7 +179,7 @@ dt_proc_bpenable(dt_proc_t *dpr) dt_dprintf("breakpoints enabled\n"); } -void +static void dt_proc_bpdisable(dt_proc_t *dpr) { dt_bkpt_t *dbp; @@ -241,8 +241,17 @@ dt_proc_stop(dt_proc_t *dpr, uint8_t why) (void) pthread_cond_broadcast(&dpr->dpr_cv); + /* + * We disable breakpoints while stopped to preserve the + * integrity of the program text for both our own disassembly + * and that of the kernel. + */ + dt_proc_bpdisable(dpr); + while (dpr->dpr_stop & DT_PROC_STOP_IDLE) (void) pthread_cond_wait(&dpr->dpr_cv, &dpr->dpr_lock); + + dt_proc_bpenable(dpr); } } |