From emaste@FreeBSD.org  Thu Nov 13 15:27:36 2008
Return-Path: <emaste@FreeBSD.org>
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 141C11065672
	for <FreeBSD-gnats-submit@freebsd.org>; Thu, 13 Nov 2008 15:27:36 +0000 (UTC)
	(envelope-from emaste@FreeBSD.org)
Received: from ref8-amd64.freebsd.org (ref8-amd64.freebsd.org [IPv6:2001:4f8:fff6::5f])
	by mx1.freebsd.org (Postfix) with ESMTP id 068828FC0C
	for <FreeBSD-gnats-submit@freebsd.org>; Thu, 13 Nov 2008 15:27:36 +0000 (UTC)
	(envelope-from emaste@FreeBSD.org)
Received: from ref8-amd64.freebsd.org (localhost [127.0.0.1])
	by ref8-amd64.freebsd.org (8.14.3/8.14.3) with ESMTP id mADFRZp4044510
	for <FreeBSD-gnats-submit@freebsd.org>; Thu, 13 Nov 2008 15:27:35 GMT
	(envelope-from emaste@ref8-amd64.freebsd.org)
Received: (from emaste@localhost)
	by ref8-amd64.freebsd.org (8.14.3/8.14.3/Submit) id mADFRZt0044509;
	Thu, 13 Nov 2008 15:27:35 GMT
	(envelope-from emaste)
Message-Id: <200811131527.mADFRZt0044509@ref8-amd64.freebsd.org>
Date: Thu, 13 Nov 2008 15:27:35 GMT
From: Ed Maste <emaste@FreeBSD.org>
Reply-To: Ed Maste <emaste@FreeBSD.org>
To: FreeBSD-gnats-submit@freebsd.org
Cc:
Subject: ps(1) command output includes thread name only when it is the last field
X-Send-Pr-Version: 3.113
X-GNATS-Notify:

>Number:         128842
>Category:       bin
>Synopsis:       ps(1) command output includes thread name only when it is the last field
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    attilio
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Thu Nov 13 15:30:01 UTC 2008
>Closed-Date:    Fri Jul 15 13:22:30 UTC 2011
>Last-Modified:  Fri Jul 15 13:22:30 UTC 2011
>Originator:     Ed Maste
>Release:        FreeBSD 8.0-CURRENT amd64
>Organization:
FreeBSD
>Environment:
System: FreeBSD ref8-amd64.freebsd.org 8.0-CURRENT FreeBSD 8.0-CURRENT #0 r184542: Sun Nov 2 00:26:55 UTC 2008 peter@ref8-amd64.freebsd.org:/scratch/src/sys/amd64/compile/REF8-AMD64 amd64


>Description:

If the command (comm field) is included in ps output and is the last field,
both the process and thread names are displayed separated by a slash.  If
however it is not the last field, only the process name is shown.

[emaste@ref8-amd64 ~]$ ps -axH -o pid,lwp,comm | head
  PID    LWP COMMAND
    0 100000 kernel/swapper
    0 100025 kernel/thread taskq
    0 100028 kernel/acpi_task_0
[...]

[emaste@ref8-amd64 ~]$ ps -axH -o comm,pid,lwp | head
COMMAND               PID    LWP
kernel                  0 100000
kernel                  0 100025
kernel                  0 100028
[...]

>How-To-Repeat:
Run ps with comm as a -o flag and not the last column.

>Fix:


>Release-Note:
>Audit-Trail:
Responsible-Changed-From-To: freebsd-bugs->emaste 
Responsible-Changed-By: emaste 
Responsible-Changed-When: Thu Nov 13 15:31:55 UTC 2008 
Responsible-Changed-Why:  
Hang on to my PR 

http://www.freebsd.org/cgi/query-pr.cgi?pr=128842 

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: bin/128842: commit references a PR
Date: Thu, 26 Feb 2009 18:01:22 +0000 (UTC)

 Author: attilio
 Date: Thu Feb 26 18:01:07 2009
 New Revision: 189078
 URL: http://svn.freebsd.org/changeset/base/189078
 
 Log:
   [1]	When showing threads, the thread name just appears if the comm
   	label is choosen as last printout (ucomm suffers of this such bug
   	too).  That bug is caused by the fact that the fixed size of
   	printout doesn't leave enough space for them to be printed out.
   	Implement ucomm and comm commands with a dynamic size lenght for
   	buffers.
   
   [2]	On AMD64 architecture pointers don't have enough chars space to
   	be shown (8 chars while they need 16).  Fix them by providing
   	a variadic space so that it fits well on both 64 and 32 bits
   	architectures.
   
   [3]	Check a return value of malloc() that wasn't checked before.
   
   PR:		bin/128841, bin/128842
   Reviewed by:	jhb, emaste
   Sponsored by:	Sandvine Incorporated
 
 Modified:
   head/bin/ps/extern.h
   head/bin/ps/keyword.c
   head/bin/ps/print.c
 
 Modified: head/bin/ps/extern.h
 ==============================================================================
 --- head/bin/ps/extern.h	Thu Feb 26 17:46:54 2009	(r189077)
 +++ head/bin/ps/extern.h	Thu Feb 26 18:01:07 2009	(r189078)
 @@ -71,6 +71,7 @@ void	 priorityr(KINFO *, VARENT *);
  void	 rgroupname(KINFO *, VARENT *);
  void	 runame(KINFO *, VARENT *);
  void	 rvar(KINFO *, VARENT *);
 +int	 s_comm(KINFO *);
  int	 s_label(KINFO *);
  int	 s_rgroupname(KINFO *);
  int	 s_runame(KINFO *);
 
 Modified: head/bin/ps/keyword.c
 ==============================================================================
 --- head/bin/ps/keyword.c	Thu Feb 26 17:46:54 2009	(r189077)
 +++ head/bin/ps/keyword.c	Thu Feb 26 18:01:07 2009	(r189078)
 @@ -79,8 +79,8 @@ static VAR var[] = {
  		CHAR, NULL, 0},
  	{"blocked", "", "sigmask", 0, NULL, NULL, 0, 0, CHAR, NULL, 0},
  	{"caught", "", "sigcatch", 0, NULL, NULL, 0, 0, CHAR, NULL, 0},
 -	{"comm", "COMMAND", NULL, LJUST, ucomm, NULL, MAXCOMLEN, 0, CHAR,
 -		NULL, 0},
 +	{"comm", "COMMAND", NULL, LJUST|DSIZ, ucomm, s_comm,
 +		COMMLEN + OCOMMLEN + 1, 0, CHAR, NULL, 0},
  	{"command", "COMMAND", NULL, COMM|LJUST|USER, command, NULL, 16, 0,
  		CHAR, NULL, 0},
  	{"cpu", "CPU", NULL, 0, kvar, NULL, 3, KOFF(ki_estcpu), UINT, "d",
 @@ -135,12 +135,13 @@ static VAR var[] = {
  		LONG, "ld", 0},
  	{"nvcsw", "NVCSW", NULL, USER, rvar, NULL, 5, ROFF(ru_nvcsw),
  		LONG, "ld", 0},
 -	{"nwchan", "NWCHAN", NULL, LJUST, nwchan, NULL, 8, 0, CHAR, NULL, 0},
 +	{"nwchan", "NWCHAN", NULL, LJUST, nwchan, NULL, sizeof(void *) * 2, 0,
 +		CHAR, NULL, 0},
  	{"oublk", "OUBLK", NULL, USER, rvar, NULL, 4, ROFF(ru_oublock),
  		LONG, "ld", 0},
  	{"oublock", "", "oublk", 0, NULL, NULL, 0, 0, CHAR, NULL, 0},
 -	{"paddr", "PADDR", NULL, 0, kvar, NULL, 8, KOFF(ki_paddr), KPTR,
 -		"lx", 0},
 +	{"paddr", "PADDR", NULL, 0, kvar, NULL, sizeof(void *) * 2,
 +		KOFF(ki_paddr), KPTR, "lx", 0},
  	{"pagein", "PAGEIN", NULL, USER, pagein, NULL, 6, 0, CHAR, NULL, 0},
  	{"pcpu", "", "%cpu", 0, NULL, NULL, 0, 0, CHAR, NULL, 0},
  	{"pending", "", "sig", 0, NULL, NULL, 0, 0, CHAR, NULL, 0},
 @@ -195,13 +196,13 @@ static VAR var[] = {
  	{"tsiz", "TSIZ", NULL, 0, kvar, NULL, 4, KOFF(ki_tsize), PGTOK, "ld", 0},
  	{"tt", "TT ", NULL, 0, tname, NULL, 4, 0, CHAR, NULL, 0},
  	{"tty", "TTY", NULL, LJUST, longtname, NULL, 8, 0, CHAR, NULL, 0},
 -	{"ucomm", "UCOMM", NULL, LJUST, ucomm, NULL, MAXCOMLEN, 0, CHAR, NULL,
 -		0},
 +	{"ucomm", "UCOMM", NULL, LJUST|DSIZ, ucomm, s_comm,
 +		COMMLEN + OCOMMLEN + 1, 0, CHAR, NULL, 0},
  	{"uid", "UID", NULL, 0, kvar, NULL, UIDLEN, KOFF(ki_uid), UINT,
  		UIDFMT, 0},
  	{"upr", "UPR", NULL, 0, upr, NULL, 3, 0, CHAR, NULL, 0},
 -	{"uprocp", "UPROCP", NULL, 0, kvar, NULL, 8, KOFF(ki_paddr), KPTR,
 -		"lx", 0},
 +	{"uprocp", "UPROCP", NULL, 0, kvar, NULL, sizeof(void *) * 2,
 +		KOFF(ki_paddr), KPTR, "lx", 0},
  	{"user", "USER", NULL, LJUST|DSIZ, uname, s_uname, USERLEN, 0, CHAR,
  		NULL, 0},
  	{"usrpri", "", "upr", 0, NULL, NULL, 0, 0, CHAR, NULL, 0},
 @@ -325,6 +326,8 @@ findvar(char *p, int user, char **header
  			 */
  			rflen = strlen(v->alias) + strlen(hp) + 2;
  			realfmt = malloc(rflen);
 +			if (realfmt == NULL)
 +				errx(1, "malloc failed");
  			snprintf(realfmt, rflen, "%s=%s", v->alias, hp);
  			parsefmt(realfmt, user);
  		}
 
 Modified: head/bin/ps/print.c
 ==============================================================================
 --- head/bin/ps/print.c	Thu Feb 26 17:46:54 2009	(r189077)
 +++ head/bin/ps/print.c	Thu Feb 26 18:01:07 2009	(r189078)
 @@ -177,6 +177,7 @@ command(KINFO *k, VARENT *ve)
  void
  ucomm(KINFO *k, VARENT *ve)
  {
 +	char tmpbuff[COMMLEN + OCOMMLEN + 2];
  	VAR *v;
  
  	v = ve->var;
 @@ -184,8 +185,15 @@ ucomm(KINFO *k, VARENT *ve)
  		(void)printf("%s", k->ki_p->ki_comm);
  		if (showthreads && k->ki_p->ki_numthreads > 1)
  			printf("/%s", k->ki_p->ki_ocomm);
 -	} else
 -		(void)printf("%-*s", v->width, k->ki_p->ki_comm);
 +	} else {
 +		bzero(tmpbuff, sizeof(tmpbuff));
 +		if (showthreads && k->ki_p->ki_numthreads > 1)
 +			sprintf(tmpbuff, "%s/%s", k->ki_p->ki_comm,
 +			    k->ki_p->ki_ocomm);
 +		else
 +			sprintf(tmpbuff, "%s", k->ki_p->ki_comm);
 +		(void)printf("%-*s", v->width, tmpbuff);
 +	}
  }
  
  void
 @@ -821,6 +829,20 @@ out:
  }
  
  int
 +s_comm(KINFO *k)
 +{
 +	char tmpbuff[COMMLEN + OCOMMLEN + 2];
 +
 +	bzero(tmpbuff, sizeof(tmpbuff));
 +	if (showthreads && k->ki_p->ki_numthreads > 1)
 +		sprintf(tmpbuff, "%s/%s", k->ki_p->ki_comm,
 +		    k->ki_p->ki_ocomm);
 +	else
 +		sprintf(tmpbuff, "%s", k->ki_p->ki_comm);
 +	return (strlen(tmpbuff));
 +}
 +
 +int
  s_label(KINFO *k)
  {
  	char *string = NULL;
 _______________________________________________
 svn-src-all@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/svn-src-all
 To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org"
 
Responsible-Changed-From-To: emaste->attilio 
Responsible-Changed-By: emaste 
Responsible-Changed-When: Mon Mar 9 17:16:00 UTC 2009 
Responsible-Changed-Why:  
Attilio is working on these issues for me. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=128842 
State-Changed-From-To: open->patched 
State-Changed-By: gavin 
State-Changed-When: Thu Mar 26 12:32:37 UTC 2009 
State-Changed-Why:  
THis is fixed in HEAD but not MFC'd 

http://www.freebsd.org/cgi/query-pr.cgi?pr=128842 
State-Changed-From-To: patched->closed 
State-Changed-By: pluknet 
State-Changed-When: Fri Jul 15 13:22:17 UTC 2011 
State-Changed-Why:  
Merged to stable/7 and stable/6. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=128842 
>Unformatted:
