unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#12800: Assume at least POSIX.1-1988 for getpgrp, setpgid, setsid.
@ 2012-11-04 19:25 Paul Eggert
  2012-11-04 19:48 ` Eli Zaretskii
  0 siblings, 1 reply; 3+ messages in thread
From: Paul Eggert @ 2012-11-04 19:25 UTC (permalink / raw)
  To: 12800

Tags: patch

This is a proposed code-cleanup patch that arose from a discussion
with Eli Zaretskii.  Tested on GNU/Linux and on Solaris.

=== modified file 'ChangeLog'
--- ChangeLog	2012-11-03 20:48:03 +0000
+++ ChangeLog	2012-11-04 19:22:04 +0000
@@ -1,3 +1,9 @@
+2012-11-04  Paul Eggert  <eggert@cs.ucla.edu>
+
+	Assume at least POSIX.1-1988 for getpgrp, setpgid, setsid.
+	* configure.ac (setpgid, setsid): Assume their existence.
+	(AC_FUNC_GETPGRP, SETPGRP_RELEASES_CTTY): Remove; obsolete.
+
 2012-11-03  Eli Zaretskii  <eliz@gnu.org>
 
 	* lib/makefile.w32-in (GNULIBOBJS): Add $(BLD)/fpending.$(O) and

=== modified file 'admin/CPP-DEFINES'
--- admin/CPP-DEFINES	2012-09-16 21:43:55 +0000
+++ admin/CPP-DEFINES	2012-11-04 19:22:04 +0000
@@ -298,9 +298,7 @@
 HAVE_SEQPACKET
 HAVE_SETITIMER
 HAVE_SETLOCALE
-HAVE_SETPGID
 HAVE_SETRLIMIT
-HAVE_SETSID
 HAVE_SHARED_GAME_DIR
 HAVE_SHUTDOWN
 HAVE_SIGNED_${GLTYPE}
@@ -433,7 +431,6 @@
 PTY_TTY_NAME_SPRINTF
 PURESIZE
 RUN_TIME_REMAP
-SETPGRP_RELEASES_CTTY
 SETUP_SLAVE_PTY
 SIGALRM
 SIGCHLD

=== modified file 'admin/ChangeLog'
--- admin/ChangeLog	2012-11-03 19:19:05 +0000
+++ admin/ChangeLog	2012-11-04 19:22:04 +0000
@@ -1,3 +1,9 @@
+2012-11-04  Paul Eggert  <eggert@cs.ucla.edu>
+
+	Assume at least POSIX.1-1988 for getpgrp, setpgid, setsid.
+	* CPP-DEFINES (HAVE_SETPGID, HAVE_SETSID, SETPGRP_RELEASES_CTTY):
+	Remove; obsolete.
+
 2012-11-03  Glenn Morris  <rgm@gnu.org>
 
 	* admin.el (set-copyright): Add msdos/sed2v2.inp.

=== modified file 'configure.ac'
--- configure.ac	2012-11-02 00:48:12 +0000
+++ configure.ac	2012-11-04 19:22:04 +0000
@@ -2871,9 +2871,9 @@
 
 AC_CHECK_FUNCS(gethostname \
 closedir getrusage get_current_dir_name \
-lrand48 setsid \
+lrand48 \
 fpathconf select euidaccess getpagesize setlocale \
-utimes getrlimit setrlimit setpgid getcwd shutdown getaddrinfo \
+utimes getrlimit setrlimit getcwd shutdown getaddrinfo \
 __fpending strsignal setitimer \
 sendto recvfrom getsockname getpeername getifaddrs freeifaddrs \
 gai_strerror mkstemp getline getdelim fsync sync \
@@ -2916,8 +2916,6 @@
 
 AC_FUNC_FSEEKO
 
-AC_FUNC_GETPGRP
-
 # UNIX98 PTYs.
 AC_CHECK_FUNCS(grantpt)
 
@@ -4058,8 +4056,6 @@
   irix6-5)
     AC_DEFINE(PREFER_VSUSP, 1, [Define if process_send_signal should
       use VSUSP instead of VSWTCH.])
-    AC_DEFINE(SETPGRP_RELEASES_CTTY, 1, [Define if process.c:child_setup
-      should not call setpgrp.])
     ;;
 
   sol2-10)

=== modified file 'src/ChangeLog'
--- src/ChangeLog	2012-11-04 17:29:52 +0000
+++ src/ChangeLog	2012-11-04 19:22:04 +0000
@@ -1,5 +1,23 @@
 2012-11-04  Paul Eggert  <eggert@cs.ucla.edu>
 
+	Assume at least POSIX.1-1988 for getpgrp, setpgid, setsid.
+	This removes code that has been obsolete since around 1990.
+	* callproc.c (Fcall_process):
+	* emacs.c (main):
+	* process.c (create_process):
+	* term.c (dissociate_if_controlling_tty):
+	Assume setsid exists.
+	* callproc.c (child_setup): Assume setpgid exists and behaves as
+	per POSIX.1-1988 or later.
+	* conf_post.h (setpgid) [!HAVE_SETPGID]: Remove.
+	* emacs.c (shut_down_emacs):
+	* sysdep.c (sys_suspend, init_foreground_group):
+	Assume getpgrp behaves as per POSIX.1-1998 or later.
+	* msdos.c (setpgrp): Remove.
+	(setpgid, setsid): New functions.
+	* systty.h (EMACS_GETPGRP): Remove.  All callers now use getpgrp.
+	* term.c (no_controlling_tty): Remove; unused.
+
 	Fix data-loss with --version (Bug#9574).
 	* emacs.c (close_output_streams): Use strerror, not emacs_strerror,
 	as we can't assume that emacs_strerror is initialized, and strerror

=== modified file 'src/callproc.c'
--- src/callproc.c	2012-10-31 17:27:29 +0000
+++ src/callproc.c	2012-11-04 19:22:04 +0000
@@ -612,11 +612,7 @@
 	if (fd[0] >= 0)
 	  emacs_close (fd[0]);
 
-#ifdef HAVE_SETSID
 	setsid ();
-#else
-	setpgid (0, 0);
-#endif
 
 	/* Emacs ignores SIGPIPE, but the child should not.  */
 	signal (SIGPIPE, SIG_DFL);
@@ -1286,11 +1282,7 @@
   if (err != in && err != out)
     emacs_close (err);
 
-#if defined HAVE_SETPGID || ! (defined USG && defined SETPGRP_RELEASES_CTTY)
-  setpgid (pid, pid);
-#endif
-
-  /* setpgrp_of_tty is incorrect here; it uses input_fd.  */
+  setpgid (0, 0);
   tcsetpgrp (0, pid);
 
   /* execvp does not accept an environment arg so the only way

=== modified file 'src/conf_post.h'
--- src/conf_post.h	2012-11-03 13:48:33 +0000
+++ src/conf_post.h	2012-11-04 19:22:04 +0000
@@ -121,14 +121,6 @@
 
 #define emacs_raise(sig) msdos_fatal_signal (sig)
 
-#ifndef HAVE_SETPGID
-# ifdef USG
-#  define setpgid(pid, pgid) setpgrp ()
-# else
-#  define setpgid(pid, pgid) setpgrp (pid, pgid)
-# endif
-#endif
-
 /* Define one of these for easier conditionals.  */
 #ifdef HAVE_X_WINDOWS
 /* We need a little extra space, see ../../lisp/loadup.el and the

=== modified file 'src/emacs.c'
--- src/emacs.c	2012-11-04 17:29:52 +0000
+++ src/emacs.c	2012-11-04 19:22:04 +0000
@@ -1101,9 +1101,7 @@
 	 that it is not accessible to programs started from .emacs.  */
       fcntl (daemon_pipe[1], F_SETFD, FD_CLOEXEC);
 
-#ifdef HAVE_SETSID
       setsid ();
-#endif
 #else /* DOS_NT */
       fprintf (stderr, "This platform does not support the -daemon flag.\n");
       exit (1);
@@ -1915,7 +1913,7 @@
   /* If we are controlling the terminal, reset terminal modes.  */
 #ifndef DOS_NT
   {
-    pid_t pgrp = EMACS_GETPGRP (0);
+    pid_t pgrp = getpgrp ();
     pid_t tpgrp = tcgetpgrp (0);
     if ((tpgrp != -1) && tpgrp == pgrp)
       {

=== modified file 'src/msdos.c'
--- src/msdos.c	2012-11-03 13:48:33 +0000
+++ src/msdos.c	2012-11-04 19:22:04 +0000
@@ -3927,8 +3927,9 @@
 /*
  * A few unimplemented functions that we silently ignore.
  */
-int setpgrp (void) {return 0; }
+int setpgid (int pid, int pgid) { return 0; }
 int setpriority (int x, int y, int z) { return 0; }
+pid_t setsid (void) { return 0; }
 
 #if __DJGPP__ == 2 && __DJGPP_MINOR__ < 4
 ssize_t

=== modified file 'src/process.c'
--- src/process.c	2012-11-03 18:32:41 +0000
+++ src/process.c	2012-11-04 19:22:04 +0000
@@ -1739,7 +1739,6 @@
       /* Make the pty be the controlling terminal of the process.  */
 #ifdef HAVE_PTYS
       /* First, disconnect its current controlling terminal.  */
-#ifdef HAVE_SETSID
       /* We tried doing setsid only if pty_flag, but it caused
 	 process_set_signal to fail on SGI when using a pipe.  */
       setsid ();
@@ -1752,12 +1751,6 @@
 	  ioctl (xforkin, TIOCSCTTY, 0);
 #endif
 	}
-#else /* not HAVE_SETSID */
-      /* It's very important to call setpgid here and no time
-	 afterwards.  Otherwise, we lose our controlling tty which
-	 is set when we open the pty. */
-      setpgid (0, 0);
-#endif /* not HAVE_SETSID */
 #if defined (LDISC1)
       if (pty_flag && xforkin >= 0)
 	{
@@ -1790,22 +1783,15 @@
 	      ioctl (j, TIOCNOTTY, 0);
 	      emacs_close (j);
 	    }
-#ifndef USG
-	  /* In order to get a controlling terminal on some versions
-	     of BSD, it is necessary to put the process in pgrp 0
-	     before it opens the terminal.  */
-	  setpgid (0, 0);
-#endif
 	}
 #endif /* TIOCNOTTY */
 
 #if !defined (DONT_REOPEN_PTY)
 /*** There is a suggestion that this ought to be a
-     conditional on TIOCSPGRP,
-     or !(defined (HAVE_SETSID) && defined (TIOCSCTTY)).
+     conditional on TIOCSPGRP, or !defined TIOCSCTTY.
      Trying the latter gave the wrong results on Debian GNU/Linux 1.1;
      that system does seem to need this code, even though
-     both HAVE_SETSID and TIOCSCTTY are defined.  */
+     both TIOCSCTTY is defined.  */
 	/* Now close the pty (if we had it open) and reopen it.
 	   This makes the pty the controlling terminal of the subprocess.  */
       if (pty_flag)

=== modified file 'src/sysdep.c'
--- src/sysdep.c	2012-10-31 17:27:29 +0000
+++ src/sysdep.c	2012-11-04 19:22:04 +0000
@@ -452,7 +452,7 @@
 #if defined (SIGTSTP) && !defined (MSDOS)
 
   {
-    pid_t pgrp = EMACS_GETPGRP (0);
+    pid_t pgrp = getpgrp ();
     EMACS_KILLPG (pgrp, SIGTSTP);
   }
 
@@ -709,7 +709,7 @@
 void
 init_foreground_group (void)
 {
-  pid_t pgrp = EMACS_GETPGRP (0);
+  pid_t pgrp = getpgrp ();
   inherited_pgroup = getpid () == pgrp ? 0 : pgrp;
 }
 

=== modified file 'src/systty.h'
--- src/systty.h	2012-09-13 02:21:28 +0000
+++ src/systty.h	2012-11-04 19:22:04 +0000
@@ -63,16 +63,6 @@
 #endif
 
 \f
-/* Manipulate a terminal's current process group.  */
-
-/* EMACS_GETPGRP (arg) returns the process group of the process.  */
-
-#if defined (GETPGRP_VOID)
-#  define EMACS_GETPGRP(x) getpgrp()
-#else /* !GETPGRP_VOID */
-#  define EMACS_GETPGRP(x) getpgrp(x)
-#endif /* !GETPGRP_VOID */
-\f
 /* Manipulate a TTY's input/output processing parameters.  */
 
 /* struct emacs_tty is a structure used to hold the current tty

=== modified file 'src/term.c'
--- src/term.c	2012-11-03 05:59:17 +0000
+++ src/term.c	2012-11-04 19:22:04 +0000
@@ -133,10 +133,6 @@
 
 static int max_frame_cols;
 
-/* Non-zero if we have dropped our controlling tty and therefore
-   should not open a frame on stdout. */
-static int no_controlling_tty;
-
 \f
 
 #ifdef HAVE_GPM
@@ -2918,36 +2914,9 @@
 static void
 dissociate_if_controlling_tty (int fd)
 {
-#ifndef DOS_NT
   pid_t pgid = tcgetpgrp (fd); /* If tcgetpgrp succeeds, fd is the ctty. */
-  if (pgid != -1)
-    {
-#if defined (USG5)
-      setpgrp ();
-      no_controlling_tty = 1;
-#elif defined (CYGWIN)
-      setsid ();
-      no_controlling_tty = 1;
-#else
-#ifdef TIOCNOTTY                /* Try BSD ioctls. */
-      sigset_t blocked;
-      sigemptyset (&blocked);
-      sigaddset (&blocked, SIGTTOU);
-      pthread_sigmask (SIG_BLOCK, &blocked, 0);
-      fd = emacs_open (DEV_TTY, O_RDWR, 0);
-      if (fd != -1 && ioctl (fd, TIOCNOTTY, 0) != -1)
-        {
-          no_controlling_tty = 1;
-        }
-      if (fd != -1)
-        emacs_close (fd);
-      pthread_sigmask (SIG_UNBLOCK, &blocked, 0);
-#else
-# error "Unknown system."
-#endif  /* ! TIOCNOTTY */
-#endif  /* ! USG */
-    }
-#endif	/* !DOS_NT */
+  if (0 <= pgid)
+    setsid ();
 }
 
 /* Create a termcap display on the tty device with the given name and

=== modified file 'src/w32proc.c'
--- src/w32proc.c	2012-11-01 14:21:45 +0000
+++ src/w32proc.c	2012-11-04 19:22:04 +0000
@@ -230,12 +230,6 @@
   return (*set & (1U << signo)) != 0;
 }
 
-int
-setpgrp (int pid, int gid)
-{
-  return 0;
-}
-
 pid_t
 getpgrp (void)
 {
@@ -248,6 +242,12 @@
   return 0;
 }
 
+pid_t
+setsid (void)
+{
+  return getpid ();
+}
+
 /* Emulations of interval timers.
 
    Limitations: only ITIMER_REAL and ITIMER_PROF are supported.






^ permalink raw reply	[flat|nested] 3+ messages in thread

* bug#12800: Assume at least POSIX.1-1988 for getpgrp, setpgid, setsid.
  2012-11-04 19:25 bug#12800: Assume at least POSIX.1-1988 for getpgrp, setpgid, setsid Paul Eggert
@ 2012-11-04 19:48 ` Eli Zaretskii
  2012-11-05  3:21   ` Paul Eggert
  0 siblings, 1 reply; 3+ messages in thread
From: Eli Zaretskii @ 2012-11-04 19:48 UTC (permalink / raw)
  To: Paul Eggert; +Cc: 12800

> Date: Sun, 04 Nov 2012 11:25:55 -0800
> From: Paul Eggert <eggert@cs.ucla.edu>
> 
> @@ -2918,36 +2914,9 @@
>  static void
>  dissociate_if_controlling_tty (int fd)
>  {
> -#ifndef DOS_NT
>    pid_t pgid = tcgetpgrp (fd); /* If tcgetpgrp succeeds, fd is the ctty. */

The removal of the #ifndef will need a tcgetpgrp emulation for DOS_NT
platforms, I think.

Otherwise, I see no problems with this.

Thanks.





^ permalink raw reply	[flat|nested] 3+ messages in thread

* bug#12800: Assume at least POSIX.1-1988 for getpgrp, setpgid, setsid.
  2012-11-04 19:48 ` Eli Zaretskii
@ 2012-11-05  3:21   ` Paul Eggert
  0 siblings, 0 replies; 3+ messages in thread
From: Paul Eggert @ 2012-11-05  3:21 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 12800-done

On 11/04/2012 11:48 AM, Eli Zaretskii wrote:

> The removal of the #ifndef will need a tcgetpgrp emulation for DOS_NT
> platforms, I think.
> 
> Otherwise, I see no problems with this.

Thanks, I made that change, installed the patch as
trunk bzr 110801, and am marking this as done.





^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2012-11-05  3:21 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-11-04 19:25 bug#12800: Assume at least POSIX.1-1988 for getpgrp, setpgid, setsid Paul Eggert
2012-11-04 19:48 ` Eli Zaretskii
2012-11-05  3:21   ` Paul Eggert

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).