wchan for multithreaded process is now ~0ull or "*"
This commit is contained in:
parent
9e52b5aa29
commit
266d5b708a
1
NEWS
1
NEWS
@ -4,6 +4,7 @@ avoid truncating long usernames
|
|||||||
avoid warning about -lncurses when not linking (more)
|
avoid warning about -lncurses when not linking (more)
|
||||||
new names for shared libraries (packagers: watch out!)
|
new names for shared libraries (packagers: watch out!)
|
||||||
"make install" no longer rebuilds everything
|
"make install" no longer rebuilds everything
|
||||||
|
wchan now '*' for multi-threaded processes
|
||||||
|
|
||||||
procps-3.2.1 --> procps-3.2.2
|
procps-3.2.1 --> procps-3.2.2
|
||||||
|
|
||||||
|
12
proc/ksym.c
12
proc/ksym.c
@ -109,9 +109,6 @@ typedef struct symb {
|
|||||||
unsigned KLONG addr;
|
unsigned KLONG addr;
|
||||||
} symb;
|
} symb;
|
||||||
|
|
||||||
static const symb fail = { "?", 0 };
|
|
||||||
static const char dash[] = "-";
|
|
||||||
|
|
||||||
/* These mostly rely on POSIX to make them zero. */
|
/* These mostly rely on POSIX to make them zero. */
|
||||||
|
|
||||||
static symb hashtable[256];
|
static symb hashtable[256];
|
||||||
@ -602,10 +599,14 @@ static const char * read_wchan_file(unsigned pid){
|
|||||||
|
|
||||||
/***************************************/
|
/***************************************/
|
||||||
|
|
||||||
|
static const symb fail = { .name = "?" };
|
||||||
|
static const char dash[] = "-";
|
||||||
|
static const char star[] = "*";
|
||||||
|
|
||||||
#define MAX_OFFSET (0x1000*sizeof(long)) /* past this is generally junk */
|
#define MAX_OFFSET (0x1000*sizeof(long)) /* past this is generally junk */
|
||||||
|
|
||||||
/* return pointer to temporary static buffer with function name */
|
/* return pointer to temporary static buffer with function name */
|
||||||
const char * wchan(unsigned KLONG address, unsigned pid) {
|
const char * lookup_wchan(unsigned KLONG address, unsigned pid) {
|
||||||
const symb *mod_symb;
|
const symb *mod_symb;
|
||||||
const symb *map_symb;
|
const symb *map_symb;
|
||||||
const symb *good_symb;
|
const symb *good_symb;
|
||||||
@ -615,7 +616,8 @@ const char * wchan(unsigned KLONG address, unsigned pid) {
|
|||||||
// can't cache it due to a race condition :-(
|
// can't cache it due to a race condition :-(
|
||||||
if(use_wchan_file) return read_wchan_file(pid);
|
if(use_wchan_file) return read_wchan_file(pid);
|
||||||
|
|
||||||
if(!address) return dash;
|
if(!address) return dash;
|
||||||
|
if(!~address) return star;
|
||||||
|
|
||||||
read_and_parse();
|
read_and_parse();
|
||||||
hash = (address >> 4) & 0xff; /* got 56/63 hits & 7/63 misses */
|
hash = (address >> 4) & 0xff; /* got 56/63 hits & 7/63 misses */
|
||||||
|
@ -1,3 +1,6 @@
|
|||||||
|
# for --version-script
|
||||||
|
# WTF is the syntax for this file?
|
||||||
|
# Give me a BNF, man!
|
||||||
_3_1_14 {
|
_3_1_14 {
|
||||||
global:
|
global:
|
||||||
__cyg_profile_func_enter; __cyg_profile_func_exit; main;
|
__cyg_profile_func_enter; __cyg_profile_func_exit; main;
|
||||||
@ -5,7 +8,7 @@ global:
|
|||||||
readproc; readtask; readproctab; readproctab2; look_up_our_self; escape_command;
|
readproc; readtask; readproctab; readproctab2; look_up_our_self; escape_command;
|
||||||
escape_str; escape_strlist;
|
escape_str; escape_strlist;
|
||||||
openproc; closeproc;
|
openproc; closeproc;
|
||||||
tty_to_dev; dev_to_tty; open_psdb_message; open_psdb; wchan;
|
tty_to_dev; dev_to_tty; open_psdb_message; open_psdb; lookup_wchan;
|
||||||
display_version; procps_version; linux_version_code;
|
display_version; procps_version; linux_version_code;
|
||||||
Hertz; smp_num_cpus;
|
Hertz; smp_num_cpus;
|
||||||
sprint_uptime; uptime; user_from_uid; print_uptime; loadavg;
|
sprint_uptime; uptime; user_from_uid; print_uptime; loadavg;
|
||||||
|
@ -521,7 +521,12 @@ static proc_t* simple_readproc(PROCTAB *restrict const PT, proc_t *restrict cons
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* some number->text resolving which is time consuming */
|
// if multithreaded, some values are crap
|
||||||
|
if(p->nlwp > 1){
|
||||||
|
p->wchan = (KLONG)~0ull;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* some number->text resolving which is time consuming and kind of insane */
|
||||||
if (flags & PROC_FILLUSR){
|
if (flags & PROC_FILLUSR){
|
||||||
memcpy(p->euser, user_from_uid(p->euid), sizeof p->euser);
|
memcpy(p->euser, user_from_uid(p->euid), sizeof p->euser);
|
||||||
if(flags & PROC_FILLSTATUS) {
|
if(flags & PROC_FILLSTATUS) {
|
||||||
@ -531,7 +536,7 @@ static proc_t* simple_readproc(PROCTAB *restrict const PT, proc_t *restrict cons
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* some number->text resolving which is time consuming */
|
/* some number->text resolving which is time consuming and kind of insane */
|
||||||
if (flags & PROC_FILLGRP){
|
if (flags & PROC_FILLGRP){
|
||||||
memcpy(p->egroup, group_from_gid(p->egid), sizeof p->egroup);
|
memcpy(p->egroup, group_from_gid(p->egid), sizeof p->egroup);
|
||||||
if(flags & PROC_FILLSTATUS) {
|
if(flags & PROC_FILLSTATUS) {
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
EXTERN_C_BEGIN
|
EXTERN_C_BEGIN
|
||||||
|
|
||||||
extern const char * wchan(unsigned KLONG address, unsigned pid);
|
extern const char * lookup_wchan(unsigned KLONG address, unsigned pid);
|
||||||
extern int open_psdb(const char *restrict override);
|
extern int open_psdb(const char *restrict override);
|
||||||
extern int open_psdb_message(const char *restrict override, void (*message)(const char *, ...));
|
extern int open_psdb_message(const char *restrict override, void (*message)(const char *, ...));
|
||||||
|
|
||||||
|
@ -502,7 +502,7 @@ static int pr_wchan(char *restrict const outbuf, const proc_t *restrict const pp
|
|||||||
*/
|
*/
|
||||||
if(!(pp->wchan & 0xffffff)) return snprintf(outbuf, COLWID, "%s", "-");
|
if(!(pp->wchan & 0xffffff)) return snprintf(outbuf, COLWID, "%s", "-");
|
||||||
if(wchan_is_number) return snprintf(outbuf, COLWID, "%x", (unsigned)(pp->wchan) & 0xffffffu);
|
if(wchan_is_number) return snprintf(outbuf, COLWID, "%x", (unsigned)(pp->wchan) & 0xffffffu);
|
||||||
return snprintf(outbuf, COLWID, "%s", wchan(pp->wchan, pp->XXXID));
|
return snprintf(outbuf, COLWID, "%s", lookup_wchan(pp->wchan, pp->XXXID));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Terrible trunctuation, like BSD crap uses: I999 J999 K999 */
|
/* Terrible trunctuation, like BSD crap uses: I999 J999 K999 */
|
||||||
@ -704,7 +704,7 @@ static int pr_wname(char *restrict const outbuf, const proc_t *restrict const pp
|
|||||||
* more than one thread waiting in the kernel.
|
* more than one thread waiting in the kernel.
|
||||||
*/
|
*/
|
||||||
if(!(pp->wchan & 0xffffff)) return snprintf(outbuf, COLWID, "%s", "-");
|
if(!(pp->wchan & 0xffffff)) return snprintf(outbuf, COLWID, "%s", "-");
|
||||||
return snprintf(outbuf, COLWID, "%s", wchan(pp->wchan, pp->XXXID));
|
return snprintf(outbuf, COLWID, "%s", lookup_wchan(pp->wchan, pp->XXXID));
|
||||||
}
|
}
|
||||||
|
|
||||||
static int pr_nwchan(char *restrict const outbuf, const proc_t *restrict const pp){
|
static int pr_nwchan(char *restrict const outbuf, const proc_t *restrict const pp){
|
||||||
|
Loading…
Reference in New Issue
Block a user