Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/bin/ksh ksh: Drop support for systems without functional wai...



details:   https://anonhg.NetBSD.org/src/rev/17d796f28447
branches:  trunk
changeset: 354794:17d796f28447
user:      kamil <kamil%NetBSD.org@localhost>
date:      Fri Jun 30 02:38:09 2017 +0000

description:
ksh: Drop support for systems without functional waitpid(2)

diffstat:

 bin/ksh/conf-end.h |  13 +-------
 bin/ksh/config.h   |   8 +----
 bin/ksh/exec.c     |  12 ++-----
 bin/ksh/jobs.c     |  82 +----------------------------------------------------
 bin/ksh/sh.h       |   6 +--
 5 files changed, 11 insertions(+), 110 deletions(-)

diffs (truncated from 500 to 300 lines):

diff -r 356b33b077e1 -r 17d796f28447 bin/ksh/conf-end.h
--- a/bin/ksh/conf-end.h        Fri Jun 30 02:20:47 2017 +0000
+++ b/bin/ksh/conf-end.h        Fri Jun 30 02:38:09 2017 +0000
@@ -1,9 +1,9 @@
-/*     $NetBSD: conf-end.h,v 1.6 2017/06/30 02:20:47 kamil Exp $       */
+/*     $NetBSD: conf-end.h,v 1.7 2017/06/30 02:38:09 kamil Exp $       */
 
 /*
  * End of configuration stuff for PD ksh.
  *
- * RCSid: $NetBSD: conf-end.h,v 1.6 2017/06/30 02:20:47 kamil Exp $
+ * RCSid: $NetBSD: conf-end.h,v 1.7 2017/06/30 02:38:09 kamil Exp $
  */
 
 #if defined(EMACS) || defined(VI)
@@ -22,15 +22,6 @@
 # define EASY_HISTORY                  /* sjg's trivial history file */
 #endif
 
-/* Can we safely catch sigchld and wait for processes? */
-#if defined(HAVE_WAITPID) || defined(HAVE_WAIT3)
-# define JOB_SIGS
-#endif
-
-#if !defined(JOB_SIGS) || !(defined(POSIX_PGRP) || defined(BSD_PGRP))
-# undef JOBS /* if no JOB_SIGS, no job control support */
-#endif
-
 #ifdef HAVE_GCC_FUNC_ATTR
 # define GCC_FUNC_ATTR(x)      __attribute__((x))
 # define GCC_FUNC_ATTR2(x,y)   __attribute__((x,y))
diff -r 356b33b077e1 -r 17d796f28447 bin/ksh/config.h
--- a/bin/ksh/config.h  Fri Jun 30 02:20:47 2017 +0000
+++ b/bin/ksh/config.h  Fri Jun 30 02:38:09 2017 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: config.h,v 1.44 2017/06/30 02:20:47 kamil Exp $        */
+/*     $NetBSD: config.h,v 1.45 2017/06/30 02:38:09 kamil Exp $        */
 
 /* config.h.  Generated automatically by configure.  */
 /* config.h.in.  Generated automatically from configure.in by autoheader.  */
@@ -187,12 +187,6 @@
 /* Define if you have the valloc function.  */
 #define HAVE_VALLOC 1
 
-/* Define if you have the wait3 function.  */
-#define HAVE_WAIT3 1
-
-/* Define if you have the waitpid function.  */
-#define HAVE_WAITPID 1
-
 /* Define if you have the <dirent.h> header file.  */
 #define HAVE_DIRENT_H 1
 
diff -r 356b33b077e1 -r 17d796f28447 bin/ksh/exec.c
--- a/bin/ksh/exec.c    Fri Jun 30 02:20:47 2017 +0000
+++ b/bin/ksh/exec.c    Fri Jun 30 02:38:09 2017 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: exec.c,v 1.20 2017/06/30 02:06:59 kamil Exp $  */
+/*     $NetBSD: exec.c,v 1.21 2017/06/30 02:38:10 kamil Exp $  */
 
 /*
  * execute command tree
@@ -6,7 +6,7 @@
 #include <sys/cdefs.h>
 
 #ifndef lint
-__RCSID("$NetBSD: exec.c,v 1.20 2017/06/30 02:06:59 kamil Exp $");
+__RCSID("$NetBSD: exec.c,v 1.21 2017/06/30 02:38:10 kamil Exp $");
 #endif
 
 
@@ -201,11 +201,8 @@
 #ifdef KSH
          case TCOPROC:
          {
-# ifdef JOB_SIGS
                sigset_t        omask;
-# endif /* JOB_SIGS */
 
-# ifdef JOB_SIGS
                /* Block sigchild as we are using things changed in the
                 * signal handler
                 */
@@ -218,7 +215,7 @@
                        unwind(i);
                        /*NOTREACHED*/
                }
-# endif /* JOB_SIGS */
+
                /* Already have a (live) co-process? */
                if (coproc.job && coproc.write >= 0)
                        errorf("coprocess already exists");
@@ -249,10 +246,9 @@
                        /* create new coprocess id */
                        ++coproc.id;
                }
-# ifdef JOB_SIGS
+
                sigprocmask(SIG_SETMASK, &omask, (sigset_t *) 0);
                e->type = E_EXEC; /* no more need for error handler */
-# endif /* JOB_SIGS */
 
                /* exchild() closes coproc.* in child after fork,
                 * will also increment coproc.njobs when the
diff -r 356b33b077e1 -r 17d796f28447 bin/ksh/jobs.c
--- a/bin/ksh/jobs.c    Fri Jun 30 02:20:47 2017 +0000
+++ b/bin/ksh/jobs.c    Fri Jun 30 02:38:09 2017 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: jobs.c,v 1.15 2017/06/30 01:52:34 kamil Exp $  */
+/*     $NetBSD: jobs.c,v 1.16 2017/06/30 02:38:10 kamil Exp $  */
 
 /*
  * Process and job control
@@ -14,11 +14,6 @@
  * work :)
  *
  * Notes regarding the copious ifdefs:
- *     - JOB_SIGS is independent of JOBS - it is defined if there are modern
- *       signal and wait routines available.  This is preferred, even when
- *       JOBS is not defined, since the shell will not otherwise notice when
- *       background jobs die until the shell waits for a foreground process
- *       to die.
  *     - TTY_PGRP defined iff JOBS is defined - defined if there are tty
  *       process groups
  *     - NEED_PGRP_SYNC defined iff JOBS is defined - see comment below
@@ -26,7 +21,7 @@
 #include <sys/cdefs.h>
 
 #ifndef lint
-__RCSID("$NetBSD: jobs.c,v 1.15 2017/06/30 01:52:34 kamil Exp $");
+__RCSID("$NetBSD: jobs.c,v 1.16 2017/06/30 02:38:10 kamil Exp $");
 #endif
 
 #include <sys/wait.h>
@@ -187,10 +182,8 @@
 static int             child_max;      /* CHILD_MAX */
 
 
-#ifdef JOB_SIGS
 /* held_sigchld is set if sigchld occurs before a job is completely started */
 static int             held_sigchld;
-#endif /* JOB_SIGS */
 
 #ifdef JOBS
 static struct shf      *shl_j;
@@ -236,7 +229,6 @@
 {
        child_max = CHILD_MAX; /* so syscon() isn't always being called */
 
-#ifdef JOB_SIGS
        sigemptyset(&sm_default);
        sigprocmask(SIG_SETMASK, &sm_default, (sigset_t *) 0);
 
@@ -245,10 +237,6 @@
 
        setsig(&sigtraps[SIGCHLD], j_sigchld,
                SS_RESTORE_ORIG|SS_FORCE|SS_SHTRAP);
-#else /* JOB_SIGS */
-       /* Make sure SIGCHLD isn't ignored - can do odd things under SYSV */
-       setsig(&sigtraps[SIGCHLD], SIG_DFL, SS_RESTORE_ORIG|SS_FORCE);
-#endif /* JOB_SIGS */
 
 #ifdef JOBS
        if (!mflagset && Flag(FTALKING))
@@ -446,9 +434,7 @@
        static Proc     *last_proc;     /* for pipelines */
 
        int             i;
-#ifdef JOB_SIGS
        sigset_t        omask;
-#endif /* JOB_SIGS */
        Proc            *p;
        Job             *j;
        int             rv = 0;
@@ -461,10 +447,8 @@
                 */
                return execute(t, flags & (XEXEC | XERROK));
 
-#ifdef JOB_SIGS
        /* no SIGCHLD's while messing with job and process lists */
        sigprocmask(SIG_BLOCK, &sm_sigchld, &omask);
-#endif /* JOB_SIGS */
 
        p = new_proc();
        p->next = (Proc *) 0;
@@ -530,9 +514,7 @@
                        j_sync_open = 0;
                }
 #endif /* NEED_PGRP_SYNC */
-#ifdef JOB_SIGS
                sigprocmask(SIG_SETMASK, &omask, (sigset_t *) 0);
-#endif /* JOB_SIGS */
                errorf("cannot fork - try again");
        }
        ischild = i == 0;
@@ -609,9 +591,7 @@
                if (flags & XCOPROC)
                        coproc_cleanup(FALSE);
 #endif /* KSH */
-#ifdef JOB_SIGS
                sigprocmask(SIG_SETMASK, &omask, (sigset_t *) 0);
-#endif /* JOB_SIGS */
                cleanup_parents_env();
 #ifdef TTY_PGRP
                /* If FMONITOR or FTALKING is set, these signals are ignored,
@@ -687,9 +667,7 @@
                        rv = j_waitj(j, JW_NONE, "jw:last proc");
        }
 
-#ifdef JOB_SIGS
        sigprocmask(SIG_SETMASK, &omask, (sigset_t *) 0);
-#endif /* JOB_SIGS */
 
        return rv;
 }
@@ -698,20 +676,16 @@
 void
 startlast()
 {
-#ifdef JOB_SIGS
        sigset_t omask;
 
        sigprocmask(SIG_BLOCK, &sm_sigchld, &omask);
-#endif /* JOB_SIGS */
 
        if (last_job) { /* no need to report error - waitlast() will do it */
                /* ensure it isn't removed by check_job() */
                last_job->flags |= JF_WAITING;
                j_startjob(last_job);
        }
-#ifdef JOB_SIGS
        sigprocmask(SIG_SETMASK, &omask, (sigset_t *) 0);
-#endif /* JOB_SIGS */
 }
 
 /* wait for last job: only used for `command` jobs */
@@ -720,11 +694,9 @@
 {
        int     rv;
        Job     *j;
-#ifdef JOB_SIGS
        sigset_t omask;
 
        sigprocmask(SIG_BLOCK, &sm_sigchld, &omask);
-#endif /* JOB_SIGS */
 
        j = last_job;
        if (!j || !(j->flags & JF_STARTED)) {
@@ -732,17 +704,13 @@
                        warningf(TRUE, "waitlast: no last job");
                else
                        internal_errorf(0, "waitlast: not started");
-#ifdef JOB_SIGS
                sigprocmask(SIG_SETMASK, &omask, (sigset_t *) 0);
-#endif /* JOB_SIGS */
                return 125; /* not so arbitrary, non-zero value */
        }
 
        rv = j_waitj(j, JW_NONE, "jw:waitlast");
 
-#ifdef JOB_SIGS
        sigprocmask(SIG_SETMASK, &omask, (sigset_t *) 0);
-#endif /* JOB_SIGS */
 
        return rv;
 }
@@ -757,11 +725,9 @@
        Job     *j;
        int     ecode;
        int     flags = JW_INTERRUPT|JW_ASYNCNOTIFY;
-#ifdef JOB_SIGS
        sigset_t omask;
 
        sigprocmask(SIG_BLOCK, &sm_sigchld, &omask);
-#endif /* JOB_SIGS */
 
        *sigp = 0;
 
@@ -774,24 +740,18 @@
                        if (j->ppid == procpid && j->state == PRUNNING)
                                break;
                if (!j) {
-#ifdef JOB_SIGS
                        sigprocmask(SIG_SETMASK, &omask, (sigset_t *) 0);
-#endif /* JOB_SIGS */
                        return -1;
                }
        } else if ((j = j_lookup(cp, &ecode))) {
                /* don't report normal job completion */
                flags &= ~JW_ASYNCNOTIFY;
                if (j->ppid != procpid) {
-#ifdef JOB_SIGS
                        sigprocmask(SIG_SETMASK, &omask, (sigset_t *) 0);
-#endif /* JOB_SIGS */
                        return -1;
                }
        } else {
-#ifdef JOB_SIGS
                sigprocmask(SIG_SETMASK, &omask, (sigset_t *) 0);
-#endif /* JOB_SIGS */



Home | Main Index | Thread Index | Old Index