Subject: bug#332 closed by Stefan Monnier <[email-masked]> (Re: bug#332: accept-process-output hangs (incompatibility))

From: [email-masked] (Emacs bug Tracking System)

This is an automatic notification regarding your bug report
which was filed against the emacs package:

#332: accept-process-output hangs (incompatibility)

It has been closed by Stefan Monnier <[email-masked]>.

Their explanation is attached below along with your original report.
If this explanation is unsatisfactory and you have not received a
better one in a separate message then please contact Stefan Monnier <[email-masked]> by
replying to this email.

-- 
332: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=332
Emacs Bug Tracking System
Contact [email-masked] with problems
>From [email-masked] Thu May 29 09:58:02 2008
From: Stefan Monnier <[email-masked]>
Cc: [email-masked]
Subject: Re: bug#332: accept-process-output hangs (incompatibility)
Date: Thu, 29 May 2008 12:57:57 -0400

>> which previous versions accepted this form?
> GNU Emacs 21.3.50.1 (i686-pc-linux-gnu, X toolkit) of 2003-11-26 on gupu.complang.tuwien.ac.at
> GNU Emacs 21.2.50.2 (i686-pc-linux-gnu, X toolkit) of 2002-04-07 on gupu.complang.tuwien.ac.at
> GNU Emacs 20.7.1 (i386-redhat-linux-gnu, X toolkit) of Fri Mar 16 2001 on porky.devel.redhat.com
 
I've installed the patch below, which should fix your problem (note
that the interpretation of the `millisec' argument has changed since
Emacs-21 where it was a microseconds count).

        Stefan

--- process.c.~1.542.~	2008-05-22 17:12:27.000000000 -0400
+++ process.c	2008-05-29 12:52:17.000000000 -0400
@@ -3896,6 +3896,7 @@
 seconds and milliseconds to wait; return after that much time whether
 or not there is input.  If SECONDS is a floating point number,
 it specifies a fractional number of seconds to wait.
+The MILLISEC argument is obsolete and should be avoided.
 
 If optional fourth arg JUST-THIS-ONE is non-nil, only accept output
 from PROCESS, suspending reading output from other processes.
@@ -3911,6 +3912,18 @@
   else
     just_this_one = Qnil;
 
+  if (!NILP (millisec))
+    { /* Obsolete calling convention using integers rather than floats.  */
+      CHECK_NUMBER (millisec);
+      if (NILP (seconds))
+	seconds = make_float (XINT (millisec) / 1000.0);
+      else
+	{
+	  CHECK_NUMBER (seconds);
+	  seconds = make_float (XINT (millisec) / 1000.0 + XINT (seconds));
+	}
+    }
+
   if (!NILP (seconds))
     {
       if (INTEGERP (seconds))
@@ -3924,19 +3937,6 @@
       else
 	wrong_type_argument (Qnumberp, seconds);
 
-      if (INTEGERP (millisec))
-	{
-	  int carry;
-	  usecs += XINT (millisec) * 1000;
-	  carry = usecs / 1000000;
-	  secs += carry;
-	  if ((usecs -= carry * 1000000) < 0)
-	    {
-	      secs--;
-	      usecs += 1000000;
-	    }
-	}
-
       if (secs < 0 || (secs == 0 && usecs == 0))
 	secs = -1, usecs = 0;
     }

>From [email-masked] Wed May 28 04:33:12 2008
To: [email-masked]
Subject: accept-process-output hangs (incompatibility)
From: Ulrich Neumerkel <[email-masked]>
Date: Wed, 28 May 2008 13:33:01 +0200

--text follows this line--

Please write in English if possible, because the Emacs maintainers
usually do not have translators to read other languages for them.

Your bug report will be posted to the [email-masked] mailing list,
and to the gnu.emacs.bug news group.

Please describe exactly what actions triggered the bug
and the precise symptoms of the bug:

Note: I reported that bug yesterday for an intermediary pre 22.2
version.  The same problem occurs in 22.2 and is incompatible with
previous versions:

C-x C-e the following two expressions

(progn
  (setq my-process
        (start-process "mine" "mine" "sleep" "1h"))
  (list-processes))

(accept-process-output my-process nil 400)

We create a process mine, that sleeps for an hour.
accept-process-output will hang, whereas it should return after 400
milliseconds.  However, if argument SECONDS is replaced by 0 it will
eval as expected.

In GNU Emacs 22.2.1 (i686-pc-linux-gnu, X toolkit)
 of 2008-05-28 on gupu.complang.tuwien.ac.at
Windowing system distributor `The XFree86 Project, Inc', version 11.0.4003
configured using `configure  '--without-toolkit-scroll-bars' '--prefix' '/opt/gupu' '--with-git=no''

Important settings:
  value of $LC_ALL: nil
  value of $LC_COLLATE: nil
  value of $LC_CTYPE: nil
  value of $LC_MESSAGES: nil
  value of $LC_MONETARY: nil
  value of $LC_NUMERIC: nil
  value of $LC_TIME: nil
  value of $LANG: en_US
  locale-coding-system: iso-8859-1
  default-enable-multibyte-characters: t

Major mode: Emacs-Lisp

Minor modes in effect:
  tooltip-mode: t
  tool-bar-mode: t
  mouse-wheel-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  unify-8859-on-encoding-mode: t
  utf-translate-cjk-mode: t
  auto-compression-mode: t
  line-number-mode: t

Recent input:
<help-echo> <help-echo> <help-echo> <down-mouse-1> 
<mouse-1> M-x C-g C-x C-f ~ / l f t <tab> e m <tab> 
a <tab> <tab> <tab> / <tab> <tab> e <tab> <return> 
<down> <down> C-x C-g <down> C-k <down> <down> <down> 
<down> <down> <down> <down> <down> <down> C-y C-a <up> 
<up> <up> <up> <up> <up> <up> <up> C-SPC <up> <up> 
<up> C-w C-k C-k C-k C-k C-x C-s <down> <down> <down> 
<down> C-x C-e C-w <down> C-x C-g C-/ <down> C-x C-e 
C-g <help-echo> <help-echo> <help-echo> <help-echo> 
<help-echo> <help-echo> <help-echo> <help-echo> <help-echo> 
<help-echo> <help-echo> <help-echo> <help-echo> <help-echo> 
<help-echo> <help-echo> <help-echo> <help-echo> <help-echo> 
<menu-bar> <help-menu> <send-emacs-bug-report>

Recent messages:
Loading help-mode...done
Making completion list... [2 times]
Mark set [2 times]
Wrote /home/ulrich/lftp/emacs/e19.el
nil
Undo!
Quit [2 times]
Loading emacsbug...
Loading regexp-opt...done
Loading emacsbug...done