Thread flags conflict
This commit is contained in:
parent
71312f1516
commit
620b861bd5
@ -94,8 +94,13 @@
|
|||||||
#define needs_for_select (PROC_FILLSTAT | PROC_FILLSTATUS)
|
#define needs_for_select (PROC_FILLSTAT | PROC_FILLSTATUS)
|
||||||
|
|
||||||
/* thread_flags */
|
/* thread_flags */
|
||||||
#define TF_show_proc 0x0001 // show the summary line
|
#define TF_B_H 0x0001
|
||||||
#define TF_show_task 0x0002 // show the per-thread lines
|
#define TF_B_m 0x0002
|
||||||
|
#define TF_U_m 0x0004
|
||||||
|
#define TF_U_T 0x0008
|
||||||
|
#define TF_U_L 0x0010
|
||||||
|
#define TF_show_proc 0x0100 // show the summary line
|
||||||
|
#define TF_show_task 0x0200 // show the per-thread lines
|
||||||
|
|
||||||
/* personality control flags */
|
/* personality control flags */
|
||||||
#define PER_BROKEN_o 0x0001
|
#define PER_BROKEN_o 0x0001
|
||||||
|
27
ps/parser.c
27
ps/parser.c
@ -264,6 +264,7 @@ static const char *parse_sysv_option(void){
|
|||||||
* SCO UnixWare uses -L too.
|
* SCO UnixWare uses -L too.
|
||||||
*/
|
*/
|
||||||
trace("-L Print LWP (thread) info.\n");
|
trace("-L Print LWP (thread) info.\n");
|
||||||
|
thread_flags |= TF_U_L;
|
||||||
thread_flags |= TF_show_task;
|
thread_flags |= TF_show_task;
|
||||||
format_modifiers |= FM_L;
|
format_modifiers |= FM_L;
|
||||||
break;
|
break;
|
||||||
@ -299,6 +300,7 @@ static const char *parse_sysv_option(void){
|
|||||||
* Also, testing shows PID==SPID for all normal processes.
|
* Also, testing shows PID==SPID for all normal processes.
|
||||||
*/
|
*/
|
||||||
trace("-T adds strange SPID column (old sproc() threads?)\n");
|
trace("-T adds strange SPID column (old sproc() threads?)\n");
|
||||||
|
thread_flags |= TF_U_T;
|
||||||
thread_flags |= TF_show_task;
|
thread_flags |= TF_show_task;
|
||||||
format_modifiers |= FM_T;
|
format_modifiers |= FM_T;
|
||||||
break;
|
break;
|
||||||
@ -371,6 +373,7 @@ static const char *parse_sysv_option(void){
|
|||||||
case 'm':
|
case 'm':
|
||||||
trace("-m shows threads.\n");
|
trace("-m shows threads.\n");
|
||||||
/* note that AIX shows 2 lines for a normal process */
|
/* note that AIX shows 2 lines for a normal process */
|
||||||
|
thread_flags |= TF_U_m;
|
||||||
thread_flags |= TF_show_proc;
|
thread_flags |= TF_show_proc;
|
||||||
thread_flags |= TF_show_task;
|
thread_flags |= TF_show_task;
|
||||||
break;
|
break;
|
||||||
@ -503,6 +506,7 @@ static const char *parse_bsd_option(void){
|
|||||||
#endif
|
#endif
|
||||||
case 'H': // The FreeBSD way (NetBSD:s OpenBSD:k FreeBSD:H -- NIH???)
|
case 'H': // The FreeBSD way (NetBSD:s OpenBSD:k FreeBSD:H -- NIH???)
|
||||||
trace("H Print LWP (thread) info.\n"); // was: Use /vmcore as c-dumpfile\n");
|
trace("H Print LWP (thread) info.\n"); // was: Use /vmcore as c-dumpfile\n");
|
||||||
|
thread_flags |= TF_B_H;
|
||||||
thread_flags |= TF_show_task; // FIXME: determine if TF_show_proc is needed
|
thread_flags |= TF_show_task; // FIXME: determine if TF_show_proc is needed
|
||||||
//format_modifiers |= FM_L; // FIXME: determine if we need something like this
|
//format_modifiers |= FM_L; // FIXME: determine if we need something like this
|
||||||
break;
|
break;
|
||||||
@ -620,6 +624,7 @@ static const char *parse_bsd_option(void){
|
|||||||
defer_sf_option("pmem", SF_B_m);
|
defer_sf_option("pmem", SF_B_m);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
thread_flags |= TF_B_m;
|
||||||
thread_flags |= TF_show_proc;
|
thread_flags |= TF_show_proc;
|
||||||
thread_flags |= TF_show_task;
|
thread_flags |= TF_show_task;
|
||||||
break;
|
break;
|
||||||
@ -1095,6 +1100,19 @@ static void choose_dimensions(void){
|
|||||||
/* perhaps --html and --null should set unlimited width */
|
/* perhaps --html and --null should set unlimited width */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const char *thread_option_check(void){
|
||||||
|
if(!thread_flags) return NULL;
|
||||||
|
|
||||||
|
if((thread_flags&TF_B_H) && (thread_flags&(TF_B_m|TF_U_m)))
|
||||||
|
return "Thread flags conflict; can't use H with m or -m.";
|
||||||
|
if((thread_flags&TF_B_m) && (thread_flags&TF_U_m))
|
||||||
|
return "Thread flags conflict; can't use both m and -m.";
|
||||||
|
if((thread_flags&TF_U_L) && (thread_flags&TF_U_T))
|
||||||
|
return "Thread flags conflict; can't use both -L and -T.";
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
int arg_parse(int argc, char *argv[]){
|
int arg_parse(int argc, char *argv[]){
|
||||||
const char *err = NULL;
|
const char *err = NULL;
|
||||||
const char *err2 = NULL;
|
const char *err2 = NULL;
|
||||||
@ -1102,17 +1120,14 @@ int arg_parse(int argc, char *argv[]){
|
|||||||
ps_argv = argv;
|
ps_argv = argv;
|
||||||
thisarg = 0;
|
thisarg = 0;
|
||||||
|
|
||||||
#if 0
|
|
||||||
{int debugloop = 0; while(debugloop<argc){
|
|
||||||
trace("argv[%d]=%s\n", debugloop, argv[debugloop]); debugloop++;}}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if(personality & PER_FORCE_BSD) goto try_bsd;
|
if(personality & PER_FORCE_BSD) goto try_bsd;
|
||||||
|
|
||||||
err = parse_all_options();
|
err = parse_all_options();
|
||||||
if(err) goto try_bsd;
|
if(err) goto try_bsd;
|
||||||
err = process_sf_options(!not_pure_unix);
|
err = process_sf_options(!not_pure_unix);
|
||||||
if(err) goto try_bsd;
|
if(err) goto try_bsd;
|
||||||
|
err = thread_option_check();
|
||||||
|
if(err) goto try_bsd;
|
||||||
err = select_bits_setup();
|
err = select_bits_setup();
|
||||||
if(err) goto try_bsd;
|
if(err) goto try_bsd;
|
||||||
|
|
||||||
@ -1141,6 +1156,8 @@ try_bsd:
|
|||||||
if(err2) goto total_failure;
|
if(err2) goto total_failure;
|
||||||
err2 = process_sf_options(!not_pure_unix);
|
err2 = process_sf_options(!not_pure_unix);
|
||||||
if(err2) goto total_failure;
|
if(err2) goto total_failure;
|
||||||
|
err2 = thread_option_check();
|
||||||
|
if(err2) goto total_failure;
|
||||||
err2 = select_bits_setup();
|
err2 = select_bits_setup();
|
||||||
if(err2) goto total_failure;
|
if(err2) goto total_failure;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user