]> git.ipfire.org Git - thirdparty/bash.git/blobdiff - jobs.h
Bash-4.4 patch 9
[thirdparty/bash.git] / jobs.h
diff --git a/jobs.h b/jobs.h
index 65de773b856e669c2e45265124d194fb17035860..6df0607ed11f0cd79198148727c97aaecb380424 100644 (file)
--- a/jobs.h
+++ b/jobs.h
@@ -1,6 +1,6 @@
 /* jobs.h -- structures and definitions used by the jobs.c file. */
 
-/* Copyright (C) 1993-2009 Free Software Foundation, Inc.
+/* Copyright (C) 1993-2015 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -61,6 +61,11 @@ typedef struct process {
   char *command;       /* The particular program that is running. */
 } PROCESS;
 
+struct pipeline_saver {
+  struct process *pipeline;
+  struct pipeline_saver *next;
+};
+
 /* PALIVE really means `not exited' */
 #define PSTOPPED(p)    (WIFSTOPPED((p)->status))
 #define PRUNNING(p)    ((p)->running == PS_RUNNING)
@@ -137,18 +142,28 @@ struct jobstats {
   JOB *j_lastasync;    /* last async job allocated by stop_pipeline */
 };
 
+/* Revised to accommodate new hash table bgpids implementation. */
+typedef pid_t ps_index_t;
+
 struct pidstat {
- struct pidstat *next;
- pid_t pid;
- int status;
+  ps_index_t bucket_next;
+  ps_index_t bucket_prev;
+
+  pid_t pid;
+  bits16_t status;             /* only 8 bits really needed */
 };
 
 struct bgpids {
-  struct pidstat *list;
-  struct pidstat *end;
+  struct pidstat *storage;     /* storage arena */
+
+  ps_index_t head;
+  ps_index_t nalloc;
+
   int npid;
 };
 
+#define NO_PIDSTAT (ps_index_t)-1
+
 #define NO_JOB  -1     /* An impossible job array index. */
 #define DUP_JOB -2     /* A possible return value for get_job_spec (). */
 #define BAD_JOBSPEC -3 /* Bad syntax for job spec. */
@@ -156,6 +171,8 @@ struct bgpids {
 /* A value which cannot be a process ID. */
 #define NO_PID (pid_t)-1
 
+#define ANY_PID (pid_t)-1
+
 /* System calls. */
 #if !defined (HAVE_UNISTD_H)
 extern pid_t fork (), getpid (), getpgrp ();
@@ -165,7 +182,7 @@ extern pid_t fork (), getpid (), getpgrp ();
 extern struct jobstats js;
 
 extern pid_t original_pgrp, shell_pgrp, pipeline_pgrp;
-extern pid_t last_made_pid, last_asynchronous_pid;
+extern volatile pid_t last_made_pid, last_asynchronous_pid;
 extern int asynchronous_notification;
 
 extern JOB **jobs;
@@ -173,10 +190,13 @@ extern JOB **jobs;
 extern void making_children __P((void));
 extern void stop_making_children __P((void));
 extern void cleanup_the_pipeline __P((void));
+extern void discard_last_procsub_child __P((void));
 extern void save_pipeline __P((int));
-extern void restore_pipeline __P((int));
+extern PROCESS *restore_pipeline __P((int));
 extern void start_pipeline __P((void));
 extern int stop_pipeline __P((int, COMMAND *));
+extern int discard_pipeline __P((PROCESS *));
+extern void append_process __P((char *, pid_t, int, int));
 
 extern void delete_job __P((int, int));
 extern void nohup_job __P((int));
@@ -208,10 +228,16 @@ extern pid_t make_child __P((char *, int));
 extern int get_tty_state __P((void));
 extern int set_tty_state __P((void));
 
-extern int wait_for_single_pid __P((pid_t));
+extern int job_exit_status __P((int));
+extern int job_exit_signal __P((int));
+
+extern int wait_for_single_pid __P((pid_t, int));
 extern void wait_for_background_pids __P((void));
 extern int wait_for __P((pid_t));
 extern int wait_for_job __P((int));
+extern int wait_for_any_job __P((void));
+
+extern void wait_sigint_cleanup __P((void));
 
 extern void notify_and_cleanup __P((void));
 extern void reap_dead_jobs __P((void));
@@ -223,6 +249,7 @@ extern int give_terminal_to __P((pid_t, int));
 
 extern void run_sigchld_trap __P((int));
 
+extern int freeze_jobs_list __P((void));
 extern void unfreeze_jobs_list __P((void));
 extern int set_job_control __P((int));
 extern void without_job_control __P((void));
@@ -231,6 +258,7 @@ extern void restart_job_control __P((void));
 extern void set_sigchld_handler __P((void));
 extern void ignore_tty_job_signals __P((void));
 extern void default_tty_job_signals __P((void));
+extern void get_original_tty_job_signals __P((void));
 
 extern void init_job_stats __P((void));
 
@@ -238,8 +266,8 @@ extern void close_pgrp_pipe __P((void));
 extern void save_pgrp_pipe __P((int *, int));
 extern void restore_pgrp_pipe __P((int *));
 
-#if defined (JOB_CONTROL)
-extern int job_control;
-#endif
+extern void set_maxchild __P((int));
+
+extern int job_control;                /* set to 0 in nojobs.c */
 
 #endif /* _JOBS_H_ */