changeset 5240:eed870591987

(Fprocess_status): Use get_process, not Fget_process. [BROKEN_O_NONBLOCK]: Undefine O_NONBLOCK. (create_process): Delete SYSV4_PTYS code. (deactivate_process): Likewise. (create_process) [SET_CHILD_PTY_PGRP]: Do ioctls to set the pgrp of the pty. (wait_reading_process_input): Call prepare_menu_bars.
author Richard M. Stallman <rms@gnu.org>
date Thu, 23 Dec 1993 01:24:18 +0000
parents f12fe7f21c2d
children 1536c6b80ff6
files src/process.c
diffstat 1 files changed, 24 insertions(+), 19 deletions(-) [+]
line wrap: on
line diff
--- a/src/process.c	Thu Dec 23 01:22:23 1993 +0000
+++ b/src/process.c	Thu Dec 23 01:24:18 1993 +0000
@@ -67,6 +67,10 @@
 #endif /* HAVE_PTYS and no O_NDELAY */
 #endif /* BSD or STRIDE */
 
+#ifdef BROKEN_O_NONBLOCK
+#undef O_NONBLOCK
+#endif /* BROKEN_O_NONBLOCK */
+
 #ifdef NEED_BSDTTY
 #include <bsdtty.h>
 #endif
@@ -586,7 +590,7 @@
 {
   register struct Lisp_Process *p;
   register Lisp_Object status;
-  proc = Fget_process (proc);
+  proc = get_process (proc);
   if (NILP (proc))
     return proc;
   p = XPROCESS (proc);
@@ -1264,11 +1268,20 @@
 	   This makes the pty the controlling terminal of the subprocess.  */
 	if (pty_flag)
 	  {
+#ifdef SET_CHILD_PTY_PGRP
+	    int pgrp = getpid ();
+#endif
+
 	    /* I wonder if close (open (pty_name, ...)) would work?  */
 	    if (xforkin >= 0)
 	      close (xforkin);
 	    xforkout = xforkin = open (pty_name, O_RDWR, 0);
 
+#ifdef SET_CHILD_PTY_PGRP
+	    ioctl (xforkin, TIOCSPGRP, &pgrp);
+	    ioctl (xforkout, TIOCSPGRP, &pgrp);
+#endif
+
 	    if (xforkin < 0)
 	      abort ();
 	  }
@@ -1318,20 +1331,9 @@
   stop_polling ();
   signal (SIGALRM, create_process_1);
   alarm (1);
-#ifdef SYSV4_PTYS
-  /* OK to close only if it's not a pty.  Otherwise we need to leave
-     it open for ioctl to get pgrp when signals are sent, or to send
-     the interrupt characters through if that's how we're signalling
-     subprocesses.  Alternately if you are concerned about running out
-     of file descriptors, you could just save the tty name and open
-     just to do the ioctl.  */
-  if (NILP (XFASTINT (XPROCESS (process)->pty_flag)))
-#endif
-    {
-      XPROCESS (process)->subtty = Qnil;
-      if (forkin >= 0)
-	close (forkin);
-    }
+  XPROCESS (process)->subtty = Qnil;
+  if (forkin >= 0)
+    close (forkin);
   alarm (0);
   start_polling ();
   if (forkin != forkout && forkout >= 0)
@@ -1524,10 +1526,6 @@
       close (inchannel);
       if (outchannel >= 0 && outchannel != inchannel)
  	close (outchannel);
-#ifdef SYSV4_PTYS
-      if (!NILP (p->subtty))
-        close (XINT (p->subtty));
-#endif
 #endif
 
       XSET (p->infd, Lisp_Int, -1);
@@ -1710,6 +1708,10 @@
       EMACS_ADD_TIME (end_time, end_time, timeout);
     }
 
+  /* It would not be safe to call this below,
+     where we call redisplay_preserve_echo_area.  */
+  prepare_menu_bars ();
+
   while (1)
     {
       /* If calling from keyboard input, do not quit
@@ -3137,6 +3139,9 @@
     /* It's infinite.  */
     timeout_p = 0;
 
+  /* This must come before stop_polling.  */
+  prepare_menu_bars ();
+
   /* Turn off periodic alarms (in case they are in use)
      because the select emulator uses alarms.  */
   stop_polling ();