Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F149040270
D8722.id22735.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
11 KB
Referenced Files
None
Subscribers
None
D8722.id22735.diff
View Options
Index: bin/ps/print.c
===================================================================
--- bin/ps/print.c
+++ bin/ps/print.c
@@ -120,11 +120,12 @@
if (cflag) {
/* If it is the last field, then don't pad */
if (STAILQ_NEXT(ve, next_ve) == NULL) {
- asprintf(&str, "%s%s%s%s",
+ asprintf(&str, "%s%s%s%s%s",
k->ki_d.prefix ? k->ki_d.prefix : "",
k->ki_p->ki_comm,
(showthreads && k->ki_p->ki_numthreads > 1) ? "/" : "",
- (showthreads && k->ki_p->ki_numthreads > 1) ? k->ki_p->ki_tdname : "");
+ (showthreads && k->ki_p->ki_numthreads > 1) ? k->ki_p->ki_tdname : "",
+ (showthreads && k->ki_p->ki_numthreads > 1) ? k->ki_p->ki_moretdname : "");
} else
str = strdup(k->ki_p->ki_comm);
@@ -172,14 +173,16 @@
char *str;
if (STAILQ_NEXT(ve, next_ve) == NULL) { /* last field, don't pad */
- asprintf(&str, "%s%s%s%s",
+ asprintf(&str, "%s%s%s%s%s",
k->ki_d.prefix ? k->ki_d.prefix : "",
k->ki_p->ki_comm,
(showthreads && k->ki_p->ki_numthreads > 1) ? "/" : "",
- (showthreads && k->ki_p->ki_numthreads > 1) ? k->ki_p->ki_tdname : "");
+ (showthreads && k->ki_p->ki_numthreads > 1) ? k->ki_p->ki_tdname : "",
+ (showthreads && k->ki_p->ki_numthreads > 1) ? k->ki_p->ki_moretdname : "");
} else {
if (showthreads && k->ki_p->ki_numthreads > 1)
- asprintf(&str, "%s/%s", k->ki_p->ki_comm, k->ki_p->ki_tdname);
+ asprintf(&str, "%s/%s%s", k->ki_p->ki_comm,
+ k->ki_p->ki_tdname, k->ki_p->ki_moretdname);
else
str = strdup(k->ki_p->ki_comm);
}
@@ -192,7 +195,8 @@
char *str;
if (showthreads && k->ki_p->ki_numthreads > 1)
- str = strdup(k->ki_p->ki_tdname);
+ asprintf(&str, "%s%s", k->ki_p->ki_tdname,
+ k->ki_p->ki_moretdname);
else
str = strdup(" ");
Index: lib/libkvm/kvm_proc.c
===================================================================
--- lib/libkvm/kvm_proc.c
+++ lib/libkvm/kvm_proc.c
@@ -426,8 +426,6 @@
kp->ki_pri.pri_native = mtd.td_base_pri;
kp->ki_lastcpu = mtd.td_lastcpu;
kp->ki_wchan = mtd.td_wchan;
- if (mtd.td_name[0] != 0)
- strlcpy(kp->ki_tdname, mtd.td_name, MAXCOMLEN);
kp->ki_oncpu = mtd.td_oncpu;
if (mtd.td_name[0] != '\0')
strlcpy(kp->ki_tdname, mtd.td_name, sizeof(kp->ki_tdname));
Index: sys/compat/freebsd32/freebsd32.h
===================================================================
--- sys/compat/freebsd32/freebsd32.h
+++ sys/compat/freebsd32/freebsd32.h
@@ -315,7 +315,8 @@
char ki_comm[COMMLEN+1];
char ki_emul[KI_EMULNAMELEN+1];
char ki_loginclass[LOGINCLASSLEN+1];
- char ki_sparestrings[50];
+ char ki_moretdname[MAXCOMLEN-TDNAMLEN+1];
+ char ki_sparestrings[46];
int ki_spareints[KI_NSPARE_INT];
int ki_oncpu;
int ki_lastcpu;
Index: sys/kern/kern_proc.c
===================================================================
--- sys/kern/kern_proc.c
+++ sys/kern/kern_proc.c
@@ -1020,7 +1020,14 @@
strlcpy(kp->ki_wmesg, td->td_wmesg, sizeof(kp->ki_wmesg));
else
bzero(kp->ki_wmesg, sizeof(kp->ki_wmesg));
- strlcpy(kp->ki_tdname, td->td_name, sizeof(kp->ki_tdname));
+ if (strlcpy(kp->ki_tdname, td->td_name, sizeof(kp->ki_tdname)) >=
+ sizeof(kp->ki_tdname)) {
+ strlcpy(kp->ki_moretdname,
+ td->td_name + sizeof(kp->ki_tdname) - 1,
+ sizeof(kp->ki_moretdname));
+ } else {
+ bzero(kp->ki_moretdname, sizeof(kp->ki_moretdname));
+ }
if (TD_ON_LOCK(td)) {
kp->ki_kiflag |= KI_LOCKBLOCK;
strlcpy(kp->ki_lockname, td->td_lockname,
@@ -1265,6 +1272,7 @@
bcopy(ki->ki_comm, ki32->ki_comm, COMMLEN + 1);
bcopy(ki->ki_emul, ki32->ki_emul, KI_EMULNAMELEN + 1);
bcopy(ki->ki_loginclass, ki32->ki_loginclass, LOGINCLASSLEN + 1);
+ bcopy(ki->ki_moretdname, ki32->ki_moretdname, MAXCOMLEN - TDNAMLEN + 1);
CP(*ki, *ki32, ki_tracer);
CP(*ki, *ki32, ki_flag2);
CP(*ki, *ki32, ki_fibnum);
Index: sys/sys/param.h
===================================================================
--- sys/sys/param.h
+++ sys/sys/param.h
@@ -58,7 +58,7 @@
* in the range 5 to 9.
*/
#undef __FreeBSD_version
-#define __FreeBSD_version 1200017 /* Master, propagated to newvers */
+#define __FreeBSD_version 1200018 /* Master, propagated to newvers */
/*
* __FreeBSD_kernel__ indicates that this system uses the kernel of FreeBSD,
Index: sys/sys/user.h
===================================================================
--- sys/sys/user.h
+++ sys/sys/user.h
@@ -180,12 +180,13 @@
char ki_comm[COMMLEN+1]; /* command name */
char ki_emul[KI_EMULNAMELEN+1]; /* emulation name */
char ki_loginclass[LOGINCLASSLEN+1]; /* login class */
+ char ki_moretdname[MAXCOMLEN-TDNAMLEN+1]; /* more thread name */
/*
* When adding new variables, take space for char-strings from the
* front of ki_sparestrings, and ints from the end of ki_spareints.
* That way the spare room from both arrays will remain contiguous.
*/
- char ki_sparestrings[50]; /* spare string space */
+ char ki_sparestrings[46]; /* spare string space */
int ki_spareints[KI_NSPARE_INT]; /* spare room for growth */
int ki_oncpu; /* Which cpu we are on */
int ki_lastcpu; /* Last cpu we were on */
Index: usr.bin/procstat/procstat.h
===================================================================
--- usr.bin/procstat/procstat.h
+++ usr.bin/procstat/procstat.h
@@ -38,6 +38,7 @@
struct kinfo_proc;
void kinfo_proc_sort(struct kinfo_proc *kipp, int count);
+const char * kinfo_proc_thread_name(const struct kinfo_proc *kipp);
void procstat_args(struct procstat *prstat, struct kinfo_proc *kipp);
void procstat_auxv(struct procstat *prstat, struct kinfo_proc *kipp);
Index: usr.bin/procstat/procstat.c
===================================================================
--- usr.bin/procstat/procstat.c
+++ usr.bin/procstat/procstat.c
@@ -35,6 +35,7 @@
#include <libprocstat.h>
#include <stdio.h>
#include <stdlib.h>
+#include <string.h>
#include <sysexits.h>
#include <unistd.h>
@@ -126,6 +127,21 @@
qsort(kipp, count, sizeof(*kipp), kinfo_proc_compare);
}
+const char *
+kinfo_proc_thread_name(const struct kinfo_proc *kipp)
+{
+ static char name[MAXCOMLEN+1];
+
+ strlcpy(name, kipp->ki_tdname, sizeof(name));
+ strlcat(name, kipp->ki_moretdname, sizeof(name));
+ if (name[0] == '\0' || strcmp(kipp->ki_comm, name) == 0) {
+ name[0] = '-';
+ name[1] = '\0';
+ }
+
+ return (name);
+}
+
int
main(int argc, char *argv[])
{
Index: usr.bin/procstat/procstat_cs.c
===================================================================
--- usr.bin/procstat/procstat_cs.c
+++ usr.bin/procstat/procstat_cs.c
@@ -53,7 +53,7 @@
int once, twice, lastcpu, cpu;
if (!hflag)
- xo_emit("{T:/%5s %6s %-16s %-16s %2s %4s %-7s}\n", "PID",
+ xo_emit("{T:/%5s %6s %-19s %-19s %2s %4s %-7s}\n", "PID",
"TID", "COMM", "TDNAME", "CPU", "CSID", "CPU MASK");
kip = procstat_getprocs(procstat, KERN_PROC_PID | KERN_PROC_INC_THREAD,
@@ -65,11 +65,10 @@
kipp = &kip[i];
xo_emit("{k:process_id/%5d/%d} ", kipp->ki_pid);
xo_emit("{:thread_id/%6d/%d} ", kipp->ki_tid);
- xo_emit("{:command/%-16s/%s} ", strlen(kipp->ki_comm) ?
+ xo_emit("{:command/%-19s/%s} ", strlen(kipp->ki_comm) ?
kipp->ki_comm : "-");
- xo_emit("{:thread_name/%-16s/%s} ", (strlen(kipp->ki_tdname) &&
- (strcmp(kipp->ki_comm, kipp->ki_tdname) != 0)) ?
- kipp->ki_tdname : "-");
+ xo_emit("{:thread_name/%-19s/%s} ",
+ kinfo_proc_thread_name(kipp));
if (kipp->ki_oncpu != 255)
xo_emit("{:cpu/%3d/%d} ", kipp->ki_oncpu);
else if (kipp->ki_lastcpu != 255)
Index: usr.bin/procstat/procstat_kstack.c
===================================================================
--- usr.bin/procstat/procstat_kstack.c
+++ usr.bin/procstat/procstat_kstack.c
@@ -171,7 +171,7 @@
unsigned int kip_count, kstk_count;
if (!hflag)
- xo_emit("{T:/%5s %6s %-16s %-16s %-29s}\n", "PID", "TID", "COMM",
+ xo_emit("{T:/%5s %6s %-19s %-19s %-29s}\n", "PID", "TID", "COMM",
"TDNAME", "KSTACK");
kkstp = kkstp_free = procstat_getkstack(procstat, kipp, &kstk_count);
@@ -208,10 +208,9 @@
xo_emit("{k:process_id/%5d/%d} ", kipp->ki_pid);
xo_emit("{:thread_id/%6d/%d} ", kkstp->kkst_tid);
- xo_emit("{:command/%-16s/%s} ", kipp->ki_comm);
- xo_emit("{:thread_name/%-16s/%s} ", (strlen(kipp->ki_tdname) &&
- (strcmp(kipp->ki_comm, kipp->ki_tdname) != 0)) ?
- kipp->ki_tdname : "-");
+ xo_emit("{:command/%-19s/%s} ", kipp->ki_comm);
+ xo_emit("{:thread_name/%-19s/%s} ",
+ kinfo_proc_thread_name(kipp));
switch (kkstp->kkst_state) {
case KKST_STATE_RUNNING:
Index: usr.bin/procstat/procstat_threads.c
===================================================================
--- usr.bin/procstat/procstat_threads.c
+++ usr.bin/procstat/procstat_threads.c
@@ -49,7 +49,7 @@
char *threadid;
if (!hflag)
- xo_emit("{T:/%5s %6s %-16s %-16s %2s %4s %-7s %-9s}\n", "PID",
+ xo_emit("{T:/%5s %6s %-19s %-19s %2s %4s %-7s %-9s}\n", "PID",
"TID", "COMM", "TDNAME", "CPU", "PRI", "STATE", "WCHAN");
xo_emit("{ek:process_id/%d}", kipp->ki_pid);
@@ -71,11 +71,10 @@
xo_open_container(threadid);
xo_emit("{dk:process_id/%5d/%d} ", kipp->ki_pid);
xo_emit("{:thread_id/%6d/%d} ", kipp->ki_tid);
- xo_emit("{d:command/%-16s/%s} ", strlen(kipp->ki_comm) ?
+ xo_emit("{d:command/%-19s/%s} ", strlen(kipp->ki_comm) ?
kipp->ki_comm : "-");
- xo_emit("{:thread_name/%-16s/%s} ", (strlen(kipp->ki_tdname) &&
- (strcmp(kipp->ki_comm, kipp->ki_tdname) != 0)) ?
- kipp->ki_tdname : "-");
+ xo_emit("{:thread_name/%-19s/%s} ",
+ kinfo_proc_thread_name(kipp));
if (kipp->ki_oncpu != 255)
xo_emit("{:cpu/%3d/%d} ", kipp->ki_oncpu);
else if (kipp->ki_lastcpu != 255)
Index: usr.bin/top/machine.c
===================================================================
--- usr.bin/top/machine.c
+++ usr.bin/top/machine.c
@@ -991,8 +991,8 @@
if (!(flags & FMT_SHOWARGS)) {
if (ps.thread && pp->ki_flag & P_HADTHREADS &&
pp->ki_tdname[0]) {
- snprintf(cmdbuf, cmdlen, "%s{%s}", pp->ki_comm,
- pp->ki_tdname);
+ snprintf(cmdbuf, cmdlen, "%s{%s%s}", pp->ki_comm,
+ pp->ki_tdname, pp->ki_moretdname);
} else {
snprintf(cmdbuf, cmdlen, "%s", pp->ki_comm);
}
@@ -1004,7 +1004,8 @@
if (ps.thread && pp->ki_flag & P_HADTHREADS &&
pp->ki_tdname[0]) {
snprintf(cmdbuf, cmdlen,
- "[%s{%s}]", pp->ki_comm, pp->ki_tdname);
+ "[%s{%s%s}]", pp->ki_comm, pp->ki_tdname,
+ pp->ki_moretdname);
} else {
snprintf(cmdbuf, cmdlen,
"[%s]", pp->ki_comm);
@@ -1052,8 +1053,9 @@
if (ps.thread && pp->ki_flag & P_HADTHREADS &&
pp->ki_tdname[0])
snprintf(cmdbuf, cmdlen,
- "%s (%s){%s}", argbuf, pp->ki_comm,
- pp->ki_tdname);
+ "%s (%s){%s%s}", argbuf,
+ pp->ki_comm, pp->ki_tdname,
+ pp->ki_moretdname);
else
snprintf(cmdbuf, cmdlen,
"%s (%s)", argbuf, pp->ki_comm);
@@ -1061,7 +1063,8 @@
if (ps.thread && pp->ki_flag & P_HADTHREADS &&
pp->ki_tdname[0])
snprintf(cmdbuf, cmdlen,
- "%s{%s}", argbuf, pp->ki_tdname);
+ "%s{%s%s}", argbuf, pp->ki_tdname,
+ pp->ki_moretdname);
else
strlcpy(cmdbuf, argbuf, cmdlen);
}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sun, Mar 22, 11:20 PM (8 h, 6 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
30144687
Default Alt Text
D8722.id22735.diff (11 KB)
Attached To
Mode
D8722: Export the whole thread name in kinfo_proc
Attached
Detach File
Event Timeline
Log In to Comment