changeset 7044:7032d07f5ad9

(max_process_desc): New variable. (wait_reading_process_output): Don't look for process output beyond that many bits. (create_process, Fopen_network_stream, deactivate_process): Update it. (init_process): Initialize it.
author Richard M. Stallman <rms@gnu.org>
date Sat, 23 Apr 1994 05:18:09 +0000
parents acf840ff5c1c
children 6ea4737a3db7
files src/process.c
diffstat 1 files changed, 19 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/process.c	Sat Apr 23 05:14:32 1994 +0000
+++ b/src/process.c	Sat Apr 23 05:18:09 1994 +0000
@@ -215,6 +215,9 @@
 
 static SELECT_TYPE input_wait_mask;
 
+/* The largest descriptor currently in use for a process object.  */
+static int max_process_desc;
+
 /* Descriptor to use for keyboard input.  */
 static int keyboard_descriptor;
 
@@ -1383,6 +1386,8 @@
   XFASTINT (XPROCESS (process)->pid) = pid;
 
   FD_SET (inchannel, &input_wait_mask);
+  if (inchannel > max_process_desc)
+    max_process_desc = inchannel;
 
   /* If the subfork execv fails, and it exits,
      this close hangs.  I don't know why.
@@ -1571,6 +1576,8 @@
   XSET (XPROCESS (proc)->outfd, Lisp_Int, outch);
   XPROCESS (proc)->status = Qrun;
   FD_SET (inch, &input_wait_mask);
+  if (inch > max_process_desc)
+    max_process_desc = inch;
 
   UNGCPRO;
   return proc;
@@ -1608,6 +1615,16 @@
       XSET (p->outfd, Lisp_Int, -1);
       chan_process[inchannel] = Qnil;
       FD_CLR (inchannel, &input_wait_mask);
+      if (inchannel == max_process_desc)
+	{
+	  int i;
+	  /* We just closed the highest-numbered process input descriptor,
+	     so recompute the highest-numbered one now.  */
+	  max_process_desc = 0;
+	  for (i = 0; i < MAXDESC; i++)
+	    if (!NILP (chan_process[i]))
+	      max_process_desc = i;
+	}
     }
 }
 
@@ -1984,7 +2001,7 @@
       /* Really FIRST_PROC_DESC should be 0 on Unix,
 	 but this is safer in the short run.  */
       for (channel = keyboard_descriptor == 0 ? FIRST_PROC_DESC : 0;
-	   channel < MAXDESC; channel++)
+	   channel <= max_process_desc; channel++)
 	{
 	  if (FD_ISSET (channel, &Available))
 	    {
@@ -3091,6 +3108,7 @@
 #endif
 
   FD_ZERO (&input_wait_mask);
+  max_process_desc = 0;
 
   keyboard_descriptor = 0;
   FD_SET (keyboard_descriptor, &input_wait_mask);