aboutsummaryrefslogtreecommitdiff
path: root/sys/fs
diff options
context:
space:
mode:
authorAlfred Perlstein <alfred@FreeBSD.org>2002-03-29 19:12:40 +0000
committerAlfred Perlstein <alfred@FreeBSD.org>2002-03-29 19:12:40 +0000
commite9b192b758f11ad4df762df990a1cba6ea675a11 (patch)
treeab7faaf04475262dc00bd577a0bc504882219db7 /sys/fs
parentdceeb8c25c8a4b6bdb1d0e79a5c4e97bdce9a365 (diff)
Notes
Diffstat (limited to 'sys/fs')
-rw-r--r--sys/fs/procfs/procfs_status.c28
1 files changed, 17 insertions, 11 deletions
diff --git a/sys/fs/procfs/procfs_status.c b/sys/fs/procfs/procfs_status.c
index 9238dfe88681..86563ec7ce30 100644
--- a/sys/fs/procfs/procfs_status.c
+++ b/sys/fs/procfs/procfs_status.c
@@ -181,17 +181,23 @@ procfs_doproccmdline(PFS_FILL_ARGS)
* Linux behaviour is to return zero-length in this case.
*/
- if (p->p_args && (ps_argsopen || !p_cansee(td->td_proc, p))) {
- sbuf_bcpy(sb, p->p_args->ar_args, p->p_args->ar_length);
- } else if (p != td->td_proc) {
- sbuf_printf(sb, "%.*s", MAXCOMLEN, p->p_comm);
- } else {
- error = copyin((void*)PS_STRINGS, &pstr, sizeof(pstr));
- if (error)
- return (error);
- for (i = 0; i < pstr.ps_nargvstr; i++) {
- sbuf_copyin(sb, pstr.ps_argvstr[i], 0);
- sbuf_printf(sb, "%c", '\0');
+ if (ps_argsopen || !p_cansee(td->td_proc, p)) {
+ PROC_LOCK(p);
+ if (p->p_args) {
+ sbuf_bcpy(sb, p->p_args->ar_args, p->p_args->ar_length);
+ PROC_UNLOCK(p);
+ } else if (p != td->td_proc) {
+ sbuf_printf(sb, "%.*s", MAXCOMLEN, p->p_comm);
+ PROC_UNLOCK(p);
+ } else {
+ PROC_UNLOCK(p);
+ error = copyin((void*)PS_STRINGS, &pstr, sizeof(pstr));
+ if (error)
+ return (error);
+ for (i = 0; i < pstr.ps_nargvstr; i++) {
+ sbuf_copyin(sb, pstr.ps_argvstr[i], 0);
+ sbuf_printf(sb, "%c", '\0');
+ }
}
}