]> git.eshelyaron.com Git - emacs.git/commitdiff
(status_notify): Undo May 18 change.
authorRichard M. Stallman <rms@gnu.org>
Wed, 14 Jun 1995 14:10:27 +0000 (14:10 +0000)
committerRichard M. Stallman <rms@gnu.org>
Wed, 14 Jun 1995 14:10:27 +0000 (14:10 +0000)
Set update_tick at the beginning not at end.

src/process.c

index 9cf17dc17eca3036c8302e45779bc3a38b1244d4..667dcb9ae66316e86f26457cb6e87fea5ce3446a 100644 (file)
@@ -3391,7 +3391,6 @@ status_notify ()
   register Lisp_Object proc, buffer;
   Lisp_Object tail, msg;
   struct gcpro gcpro1, gcpro2;
-  Lisp_Object old_process_alist;
 
   tail = Qnil;
   msg = Qnil;
@@ -3401,97 +3400,95 @@ status_notify ()
      reference.  */
   GCPRO2 (tail, msg);
 
-  do
+  /* Set this now, so that if new processes are created by sentinels
+     that we run, we get called again to handle their status changes.  */
+  update_tick = process_tick;
+
+  for (tail = Vprocess_alist; !NILP (tail); tail = Fcdr (tail))
     {
-      old_process_alist = Vprocess_alist;
-      for (tail = Vprocess_alist; !NILP (tail); tail = Fcdr (tail))
+      Lisp_Object symbol;
+      register struct Lisp_Process *p;
+
+      proc = Fcdr (Fcar (tail));
+      p = XPROCESS (proc);
+
+      if (XINT (p->tick) != XINT (p->update_tick))
        {
-         Lisp_Object symbol;
-         register struct Lisp_Process *p;
+         XSETINT (p->update_tick, XINT (p->tick));
 
-         proc = Fcdr (Fcar (tail));
-         p = XPROCESS (proc);
+         /* If process is still active, read any output that remains.  */
+         if (XINT (p->infd) >= 0)
+           while (! EQ (p->filter, Qt)
+                  && read_process_output (proc, XINT (p->infd)) > 0);
 
-         if (XINT (p->tick) != XINT (p->update_tick))
-           {
-             XSETINT (p->update_tick, XINT (p->tick));
+         buffer = p->buffer;
 
-             /* If process is still active, read any output that remains.  */
-             if (XINT (p->infd) >= 0)
-               while (! EQ (p->filter, Qt)
-                      && read_process_output (proc, XINT (p->infd)) > 0);
+         /* Get the text to use for the message.  */
+         if (!NILP (p->raw_status_low))
+           update_status (p);
+         msg = status_message (p->status);
 
-             buffer = p->buffer;
+         /* If process is terminated, deactivate it or delete it.  */
+         symbol = p->status;
+         if (CONSP (p->status))
+           symbol = XCONS (p->status)->car;
 
-             /* Get the text to use for the message.  */
-             if (!NILP (p->raw_status_low))
-               update_status (p);
-             msg = status_message (p->status);
+         if (EQ (symbol, Qsignal) || EQ (symbol, Qexit)
+             || EQ (symbol, Qclosed))
+           {
+             if (delete_exited_processes)
+               remove_process (proc);
+             else
+               deactivate_process (proc);
+           }
 
-             /* If process is terminated, deactivate it or delete it.  */
-             symbol = p->status;
-             if (CONSP (p->status))
-               symbol = XCONS (p->status)->car;
+         /* Now output the message suitably.  */
+         if (!NILP (p->sentinel))
+           exec_sentinel (proc, msg);
+         /* Don't bother with a message in the buffer
+            when a process becomes runnable.  */
+         else if (!EQ (symbol, Qrun) && !NILP (buffer))
+           {
+             Lisp_Object ro, tem;
+             struct buffer *old = current_buffer;
+             int opoint;
 
-             if (EQ (symbol, Qsignal) || EQ (symbol, Qexit)
-                 || EQ (symbol, Qclosed))
-               {
-                 if (delete_exited_processes)
-                   remove_process (proc);
-                 else
-                   deactivate_process (proc);
-               }
+             ro = XBUFFER (buffer)->read_only;
 
-             /* Now output the message suitably.  */
-             if (!NILP (p->sentinel))
-               exec_sentinel (proc, msg);
-             /* Don't bother with a message in the buffer
-                when a process becomes runnable.  */
-             else if (!EQ (symbol, Qrun) && !NILP (buffer))
-               {
-                 Lisp_Object ro, tem;
-                 struct buffer *old = current_buffer;
-                 int opoint;
-
-                 ro = XBUFFER (buffer)->read_only;
-
-                 /* Avoid error if buffer is deleted
-                    (probably that's why the process is dead, too) */
-                 if (NILP (XBUFFER (buffer)->name))
-                   continue;
-                 Fset_buffer (buffer);
-                 opoint = point;
-                 /* Insert new output into buffer
-                    at the current end-of-output marker,
-                    thus preserving logical ordering of input and output.  */
-                 if (XMARKER (p->mark)->buffer)
-                   SET_PT (marker_position (p->mark));
-                 else
-                   SET_PT (ZV);
-                 if (point <= opoint)
-                   opoint += XSTRING (msg)->size + XSTRING (p->name)->size + 10;
-
-                 tem = current_buffer->read_only;
-                 current_buffer->read_only = Qnil;
-                 insert_string ("\nProcess ");
-                 Finsert (1, &p->name);
-                 insert_string (" ");
-                 Finsert (1, &msg);
-                 current_buffer->read_only = tem;
-                 Fset_marker (p->mark, make_number (point), p->buffer);
-
-                 SET_PT (opoint);
-                 set_buffer_internal (old);
-               }
+             /* Avoid error if buffer is deleted
+                (probably that's why the process is dead, too) */
+             if (NILP (XBUFFER (buffer)->name))
+               continue;
+             Fset_buffer (buffer);
+             opoint = point;
+             /* Insert new output into buffer
+                at the current end-of-output marker,
+                thus preserving logical ordering of input and output.  */
+             if (XMARKER (p->mark)->buffer)
+               SET_PT (marker_position (p->mark));
+             else
+               SET_PT (ZV);
+             if (point <= opoint)
+               opoint += XSTRING (msg)->size + XSTRING (p->name)->size + 10;
+
+             tem = current_buffer->read_only;
+             current_buffer->read_only = Qnil;
+             insert_string ("\nProcess ");
+             Finsert (1, &p->name);
+             insert_string (" ");
+             Finsert (1, &msg);
+             current_buffer->read_only = tem;
+             Fset_marker (p->mark, make_number (point), p->buffer);
+
+             SET_PT (opoint);
+             set_buffer_internal (old);
            }
-       } /* end for */
-    } while (! EQ (old_process_alist, Vprocess_alist));
+       }
+    } /* end for */
 
   update_mode_lines++;  /* in case buffers use %s in mode-line-format */
   redisplay_preserve_echo_area ();
 
-  update_tick = process_tick;
-
   UNGCPRO;
 }
 \f