* Process sentinel not called in batch mode
@ 2008-04-15 14:48 ` Helmut Eller
2008-05-19 16:40 ` bug#141: marked as done (Process sentinel not called in batch mode) Emacs bug Tracking System
0 siblings, 1 reply; 19+ messages in thread
From: Helmut Eller @ 2008-04-15 14:48 UTC (permalink / raw
To: bug-gnu-emacs
process-sentinels aren't called in batch mode. I'm not sure if this is
a bug or the expected behavior, but I find this quite frustrating.
To reproduce the problem do:
$shell> cat test-sentinel.el
(defvar sentinel-called nil)
(defun start-subprocess ()
(let ((proc (start-process "test" nil "bash" "-c" "sleep 1 ; exit 20")))
(set-process-sentinel proc (lambda (proc msg)
(message "sentinel: %S %s" proc msg)
(setq sentinel-called t)))
proc))
(defun print-status (proc)
(message "%s status: %s exit-status: %s sentinel-called: %s"
proc (process-status proc) (process-exit-status proc)
sentinel-called))
(defun main ()
(let ((proc (start-subprocess)))
(while (not sentinel-called)
(print-status proc)
(sit-for 1)
(accept-process-output proc 1))
(print-status proc)))
(main)
$shell> emacs -Q -batch -l test-sentinel.el
test status: run exit-status: 0 sentinel-called: nil
test status: exit exit-status: 20 sentinel-called: nil
test status: exit exit-status: 20 sentinel-called: nil
test status: exit exit-status: 20 sentinel-called: nil
test status: exit exit-status: 20 sentinel-called: nil
[Exit 130 (SIGINT)]
$shell>
Emacs can obviously detect that the suprocess has terminated but the
sentinel is never called. This used to work with Emacs 20.7 and for
certain variants of the 22.0.50 series.
Helmut.
In GNU Emacs 23.0.60.8 (i686-pc-linux-gnu, GTK+ Version 2.8.20)
of 2008-03-14 on xaital
Windowing system distributor `The X.Org Foundation', version 11.0.70101000
configured using `configure '--with-jpeg=no' '--with-gif=no' '--with-tiff=no' '--with-xft' '--without-dbus' '--without-sound''
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: nil
value of $XMODIFIERS: nil
locale-coding-system: nil
default-enable-multibyte-characters: nil
Major mode: Emacs-Lisp
Minor modes in effect:
outline-minor-mode: t
display-time-mode: t
show-paren-mode: t
mouse-wheel-mode: t
file-name-shadow-mode: t
global-font-lock-mode: t
font-lock-mode: t
global-auto-composition-mode: t
auto-compression-mode: t
line-number-mode: t
transient-mark-mode: t
Recent input:
<up> <up> <up> <down> <down> <up> <up> <up> <up> <up>
<up> <up> <down> <down> <right> <right> <right> <right>
<right> <right> <right> <right> <right> <right> <right>
<right> <right> <right> <right> <left> <left> <left>
<left> <left> <left> C-d C-M-x C-x C-s <down> C-e <down>
<down> <up> C-x C-e <down> <down> <down> <down> <down>
<down> <down> <down> <down> <down> <down> <down> <down>
<down> C-x C-e C-x b * M e <tab> <return> <up> <up>
<up> <up> <up> <up> <up> <up> <up> <up> <up> C-x b
<return> <up> <up> <up> <up> <up> <up> <up> <up> <up>
<up> <up> <up> <down> <down> <down> <down> <down> <down>
<down> <down> <down> <down> <down> <down> C-a C-d C-d
C-d <up> <up> <up> <up> C-e <down> <down> C-e C-x C-s
<down> <down> C-x C-s <up> <up> <up> <up> <up> <up>
<up> <up> <up> <up> <up> <up> <up> <up> <up> <down>
<down> <down> <down> <down> <down> <down> <down> <down>
<down> <down> <down> <up> <down> <down> <down> <down>
<down> <down> <up> <up> C-x C-e <up> <up> <up> <up>
<up> <up> <up> <up> <up> <up> <up> <up> <up> <up> <up>
<up> <up> <up> <right> <right> <right> <right> <right>
<right> <right> <right> <right> <right> <right> <right>
<right> <right> <right> <right> <right> <right> <right>
<right> <right> <right> <right> <right> <right> <right>
<right> <right> <right> <right> <right> <right> <right>
<right> <right> <right> <right> <right> <right> <right>
<right> <right> <right> <right> <right> s e e <backspace>
<backspace> l e e p 1 SPC ; SPC <left> <left> C-e C-x
C-s <left> <left> <left> <left> <left> <left> <left>
<left> <left> <left> <left> <left> <left> <left> <left>
SPC C-x C-s <left> <left> <left> <left> <left> <left>
<left> <left> <left> <left> <left> <left> <left> <left>
<left> <left> <left> <left> <right> <right> b a C-x
C-s M-x r e p SPC o <tab> SPC t SPC <backspace> r <tab>
<return>
Recent messages:
test status: exit exit-status: 20 sentinel-called: t
"test status: exit exit-status: 20 sentinel-called: t"
Wrote /home/helmut/elisp/test-sentinel.el
(No changes need to be saved)
test status: run exit-status: 0 sentinel-called: t
"test status: run exit-status: 0 sentinel-called: t"
sentinel: #<process test> exited abnormally with code 20
Wrote /home/helmut/elisp/test-sentinel.el [3 times]
Making completion list... [3 times]
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: Process sentinel not called in batch mode
@ 2008-05-13 23:28 Chong Yidong
2008-05-14 14:18 ` Stefan Monnier
2008-05-14 14:18 ` Stefan Monnier
0 siblings, 2 replies; 19+ messages in thread
From: Chong Yidong @ 2008-05-13 23:28 UTC (permalink / raw
To: emacs-devel; +Cc: 141, Helmut Eller
Helmut Eller <eller.helmut@gmail.com> wrote:
> process-sentinels aren't called in batch mode. I'm not sure if this
> is a bug or the expected behavior, but I find this quite frustrating.
> To reproduce the problem do:
> $shell> cat test-sentinel.el
(defvar sentinel-called nil)
(defun main ()
(let ((proc (start-process "test" nil "bash" "-c" "sleep 1 ; exit 20")))
(set-process-sentinel proc (lambda (proc msg)
(message "sentinel: %S %s" proc msg)
(setq sentinel-called t)))
(while (not sentinel-called)
(message "status: %s exit-status: %s sentinel-called: %s"
(process-status proc) (process-exit-status proc)
sentinel-called)
(sit-for 1)
(accept-process-output proc 1))))
(main)
> $shell> emacs -Q -batch -l test-sentinel.el
This problem occurs because wait_reading_process_output only calls
status_notify when given a nonzero DO_DISPLAY argument (process.c:4451).
Although wait_reading_process_output is called from many places in
Emacs, it is given a nonzero DO_DISPLAY argument only during
kbd_buffer_get_event. But that function is never called in batch mode.
Maybe something like the attached patch should be applied.
Alternatively, we could change Faccept_process_output so that when Emacs
is in batch mode, it calls wait_reading_process_output with a nonzero
DO_DISPLAY argument. Opinions?
*** trunk/src/process.c.~1.539.~ 2008-04-09 13:46:04.000000000 -0400
--- trunk/src/process.c 2008-05-13 19:27:01.000000000 -0400
***************
*** 4414,4420 ****
available, notify the user of the change right away. After
this explicit check, we'll let the SIGCHLD handler zap
timeout to get our attention. */
! if (update_tick != process_tick && do_display)
{
SELECT_TYPE Atemp;
#ifdef NON_BLOCKING_CONNECT
--- 4414,4421 ----
available, notify the user of the change right away. After
this explicit check, we'll let the SIGCHLD handler zap
timeout to get our attention. */
! if (update_tick != process_tick
! && (do_display || noninteractive))
{
SELECT_TYPE Atemp;
#ifdef NON_BLOCKING_CONNECT
^ permalink raw reply [flat|nested] 19+ messages in thread
* bug#141: Process sentinel not called in batch mode
@ 2008-05-13 23:28 Chong Yidong
0 siblings, 0 replies; 19+ messages in thread
From: Chong Yidong @ 2008-05-13 23:28 UTC (permalink / raw
To: emacs-devel; +Cc: 141, Helmut Eller
Helmut Eller <eller.helmut@gmail.com> wrote:
> process-sentinels aren't called in batch mode. I'm not sure if this
> is a bug or the expected behavior, but I find this quite frustrating.
> To reproduce the problem do:
> $shell> cat test-sentinel.el
(defvar sentinel-called nil)
(defun main ()
(let ((proc (start-process "test" nil "bash" "-c" "sleep 1 ; exit 20")))
(set-process-sentinel proc (lambda (proc msg)
(message "sentinel: %S %s" proc msg)
(setq sentinel-called t)))
(while (not sentinel-called)
(message "status: %s exit-status: %s sentinel-called: %s"
(process-status proc) (process-exit-status proc)
sentinel-called)
(sit-for 1)
(accept-process-output proc 1))))
(main)
> $shell> emacs -Q -batch -l test-sentinel.el
This problem occurs because wait_reading_process_output only calls
status_notify when given a nonzero DO_DISPLAY argument (process.c:4451).
Although wait_reading_process_output is called from many places in
Emacs, it is given a nonzero DO_DISPLAY argument only during
kbd_buffer_get_event. But that function is never called in batch mode.
Maybe something like the attached patch should be applied.
Alternatively, we could change Faccept_process_output so that when Emacs
is in batch mode, it calls wait_reading_process_output with a nonzero
DO_DISPLAY argument. Opinions?
*** trunk/src/process.c.~1.539.~ 2008-04-09 13:46:04.000000000 -0400
--- trunk/src/process.c 2008-05-13 19:27:01.000000000 -0400
***************
*** 4414,4420 ****
available, notify the user of the change right away. After
this explicit check, we'll let the SIGCHLD handler zap
timeout to get our attention. */
! if (update_tick != process_tick && do_display)
{
SELECT_TYPE Atemp;
#ifdef NON_BLOCKING_CONNECT
--- 4414,4421 ----
available, notify the user of the change right away. After
this explicit check, we'll let the SIGCHLD handler zap
timeout to get our attention. */
! if (update_tick != process_tick
! && (do_display || noninteractive))
{
SELECT_TYPE Atemp;
#ifdef NON_BLOCKING_CONNECT
^ permalink raw reply [flat|nested] 19+ messages in thread
* bug#141: Process sentinel not called in batch mode
2008-05-13 23:28 Process sentinel not called in batch mode Chong Yidong
2008-05-14 14:18 ` Stefan Monnier
@ 2008-05-14 14:18 ` Stefan Monnier
1 sibling, 0 replies; 19+ messages in thread
From: Stefan Monnier @ 2008-05-14 14:18 UTC (permalink / raw
To: Chong Yidong; +Cc: 141, Helmut Eller, emacs-devel
> This problem occurs because wait_reading_process_output only calls
> status_notify when given a nonzero DO_DISPLAY argument (process.c:4451).
> Although wait_reading_process_output is called from many places in
> Emacs, it is given a nonzero DO_DISPLAY argument only during
> kbd_buffer_get_event. But that function is never called in batch mode.
Does anyone know why we test do_display there?
Stefan
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: Process sentinel not called in batch mode
2008-05-13 23:28 Process sentinel not called in batch mode Chong Yidong
@ 2008-05-14 14:18 ` Stefan Monnier
2008-05-16 11:32 ` bug#141: " Richard M Stallman
2008-05-14 14:18 ` Stefan Monnier
1 sibling, 1 reply; 19+ messages in thread
From: Stefan Monnier @ 2008-05-14 14:18 UTC (permalink / raw
To: Chong Yidong; +Cc: 141, Helmut Eller, emacs-devel
> This problem occurs because wait_reading_process_output only calls
> status_notify when given a nonzero DO_DISPLAY argument (process.c:4451).
> Although wait_reading_process_output is called from many places in
> Emacs, it is given a nonzero DO_DISPLAY argument only during
> kbd_buffer_get_event. But that function is never called in batch mode.
Does anyone know why we test do_display there?
Stefan
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: bug#141: Process sentinel not called in batch mode
2008-05-14 14:18 ` Stefan Monnier
@ 2008-05-16 11:32 ` Richard M Stallman
2008-05-16 13:25 ` Stefan Monnier
0 siblings, 1 reply; 19+ messages in thread
From: Richard M Stallman @ 2008-05-16 11:32 UTC (permalink / raw
To: Stefan Monnier, 141
Cc: 141, cyd, eller.helmut, emacs-devel, bug-submit-list,
bug-gnu-emacs
> This problem occurs because wait_reading_process_output only calls
> status_notify when given a nonzero DO_DISPLAY argument (process.c:4451).
> Although wait_reading_process_output is called from many places in
> Emacs, it is given a nonzero DO_DISPLAY argument only during
> kbd_buffer_get_event. But that function is never called in batch mode.
Does anyone know why we test do_display there?
I think the idea is, if you are going to update the display, it is
good to display the fact that a process has terminated.
I don't claim this implies the code should not be changed.
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: bug#141: Process sentinel not called in batch mode
2008-05-16 11:32 ` bug#141: " Richard M Stallman
@ 2008-05-16 13:25 ` Stefan Monnier
2008-05-16 14:41 ` Eli Zaretskii
0 siblings, 1 reply; 19+ messages in thread
From: Stefan Monnier @ 2008-05-16 13:25 UTC (permalink / raw
To: rms; +Cc: 141, cyd, eller.helmut, emacs-devel, bug-submit-list,
bug-gnu-emacs
>> This problem occurs because wait_reading_process_output only calls
>> status_notify when given a nonzero DO_DISPLAY argument (process.c:4451).
>> Although wait_reading_process_output is called from many places in
>> Emacs, it is given a nonzero DO_DISPLAY argument only during
>> kbd_buffer_get_event. But that function is never called in batch mode.
> Does anyone know why we test do_display there?
> I think the idea is, if you are going to update the display, it is
> good to display the fact that a process has terminated.
This side I understand, but what about the other: why should we not
check process status in the case where we are not redisplaying?
Stefan
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: bug#141: Process sentinel not called in batch mode
2008-05-16 13:25 ` Stefan Monnier
@ 2008-05-16 14:41 ` Eli Zaretskii
2008-05-16 16:57 ` Stefan Monnier
0 siblings, 1 reply; 19+ messages in thread
From: Eli Zaretskii @ 2008-05-16 14:41 UTC (permalink / raw
To: Stefan Monnier
Cc: 141, rms, cyd, eller.helmut, emacs-devel, bug-submit-list,
bug-gnu-emacs
> From: Stefan Monnier <monnier@iro.umontreal.ca>
> Date: Fri, 16 May 2008 09:25:54 -0400
> Cc: 141@emacsbugs.donarmstrong.com, cyd@stupidchicken.com,
> eller.helmut@gmail.com, emacs-devel@gnu.org,
> bug-submit-list@donarmstrong.com, bug-gnu-emacs@gnu.org
>
> >> This problem occurs because wait_reading_process_output only calls
> >> status_notify when given a nonzero DO_DISPLAY argument (process.c:4451).
> >> Although wait_reading_process_output is called from many places in
> >> Emacs, it is given a nonzero DO_DISPLAY argument only during
> >> kbd_buffer_get_event. But that function is never called in batch mode.
>
> > Does anyone know why we test do_display there?
>
> > I think the idea is, if you are going to update the display, it is
> > good to display the fact that a process has terminated.
>
> This side I understand, but what about the other: why should we not
> check process status in the case where we are not redisplaying?
Because Emacs generally looks at process output only when it's idle?
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: bug#141: Process sentinel not called in batch mode
2008-05-16 14:41 ` Eli Zaretskii
@ 2008-05-16 16:57 ` Stefan Monnier
2008-05-16 17:23 ` Chong Yidong
2008-05-16 19:08 ` Eli Zaretskii
0 siblings, 2 replies; 19+ messages in thread
From: Stefan Monnier @ 2008-05-16 16:57 UTC (permalink / raw
To: Eli Zaretskii
Cc: 141, rms, cyd, eller.helmut, emacs-devel, bug-submit-list,
bug-gnu-emacs
>> >> This problem occurs because wait_reading_process_output only calls
>> >> status_notify when given a nonzero DO_DISPLAY argument (process.c:4451).
>> >> Although wait_reading_process_output is called from many places in
>> >> Emacs, it is given a nonzero DO_DISPLAY argument only during
>> >> kbd_buffer_get_event. But that function is never called in batch mode.
>>
>> > Does anyone know why we test do_display there?
>>
>> > I think the idea is, if you are going to update the display, it is
>> > good to display the fact that a process has terminated.
>>
>> This side I understand, but what about the other: why should we not
>> check process status in the case where we are not redisplaying?
> Because Emacs generally looks at process output only when it's idle?
I don't follow: we're talking about when should
wait_reading_process_output check status_notify.
So to repeat/rephrase my question: why doesn't
wait_reading_process_output call status_notify when it is passed a zero
do_display?
Stefan
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: bug#141: Process sentinel not called in batch mode
2008-05-16 16:57 ` Stefan Monnier
@ 2008-05-16 17:23 ` Chong Yidong
2008-05-16 19:08 ` Eli Zaretskii
1 sibling, 0 replies; 19+ messages in thread
From: Chong Yidong @ 2008-05-16 17:23 UTC (permalink / raw
To: Stefan Monnier
Cc: 141, rms, bug-gnu-emacs, eller.helmut, emacs-devel, Eli Zaretskii,
bug-submit-list
Stefan Monnier <monnier@iro.umontreal.ca> writes:
> So to repeat/rephrase my question: why doesn't
> wait_reading_process_output call status_notify when it is passed a
> zero do_display?
I don't see any good reason, but the current behavior seems to work OK
for !noninteractive.
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: bug#141: Process sentinel not called in batch mode
2008-05-16 16:57 ` Stefan Monnier
2008-05-16 17:23 ` Chong Yidong
@ 2008-05-16 19:08 ` Eli Zaretskii
2008-05-16 19:24 ` Stefan Monnier
1 sibling, 1 reply; 19+ messages in thread
From: Eli Zaretskii @ 2008-05-16 19:08 UTC (permalink / raw
To: Stefan Monnier
Cc: 141, rms, cyd, eller.helmut, emacs-devel, bug-submit-list,
bug-gnu-emacs
> From: Stefan Monnier <monnier@iro.umontreal.ca>
> Cc: rms@gnu.org, 141@emacsbugs.donarmstrong.com, cyd@stupidchicken.com, eller.helmut@gmail.com, emacs-devel@gnu.org, bug-submit-list@donarmstrong.com, bug-gnu-emacs@gnu.org
> Date: Fri, 16 May 2008 12:57:16 -0400
>
> >> This side I understand, but what about the other: why should we not
> >> check process status in the case where we are not redisplaying?
>
> > Because Emacs generally looks at process output only when it's idle?
>
> I don't follow: we're talking about when should
> wait_reading_process_output check status_notify.
>
> So to repeat/rephrase my question: why doesn't
> wait_reading_process_output call status_notify when it is passed a zero
> do_display?
Sorry, let me explain my line of thought in more detail: Emacs only
does a redisplay when it is idle. Emacs also checks input from
subprocesses when it is idle. If we are not in redisplay, it means
Emacs is not idle, and so it makes sense not to check for subprocess
output at that time.
Does this make any sense?
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: bug#141: Process sentinel not called in batch mode
2008-05-16 19:08 ` Eli Zaretskii
@ 2008-05-16 19:24 ` Stefan Monnier
2008-05-16 20:07 ` Eli Zaretskii
2008-05-16 20:58 ` bug#141: Process sentinel not called in batch mode David Kastrup
0 siblings, 2 replies; 19+ messages in thread
From: Stefan Monnier @ 2008-05-16 19:24 UTC (permalink / raw
To: Eli Zaretskii
Cc: 141, rms, cyd, eller.helmut, emacs-devel, bug-submit-list,
bug-gnu-emacs
>> >> This side I understand, but what about the other: why should we not
>> >> check process status in the case where we are not redisplaying?
>>
>> > Because Emacs generally looks at process output only when it's idle?
>>
>> I don't follow: we're talking about when should
>> wait_reading_process_output check status_notify.
>>
>> So to repeat/rephrase my question: why doesn't
>> wait_reading_process_output call status_notify when it is passed a zero
>> do_display?
> Sorry, let me explain my line of thought in more detail: Emacs only
> does a redisplay when it is idle. Emacs also checks input from
> subprocesses when it is idle. If we are not in redisplay, it means
> Emacs is not idle, and so it makes sense not to check for subprocess
> output at that time.
> Does this make any sense?
But if we're in wait_reading_process_output, that means that idle or
not, we're checking for process output, so why not check for process
status changes as well?
Stefan
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: bug#141: Process sentinel not called in batch mode
2008-05-16 19:24 ` Stefan Monnier
@ 2008-05-16 20:07 ` Eli Zaretskii
2008-05-18 3:45 ` Stefan Monnier
2008-05-16 20:58 ` bug#141: Process sentinel not called in batch mode David Kastrup
1 sibling, 1 reply; 19+ messages in thread
From: Eli Zaretskii @ 2008-05-16 20:07 UTC (permalink / raw
To: Stefan Monnier
Cc: 141, rms, cyd, eller.helmut, emacs-devel, bug-submit-list,
bug-gnu-emacs
> From: Stefan Monnier <monnier@iro.umontreal.ca>
> Cc: rms@gnu.org, 141@emacsbugs.donarmstrong.com, cyd@stupidchicken.com, eller.helmut@gmail.com, emacs-devel@gnu.org, bug-submit-list@donarmstrong.com, bug-gnu-emacs@gnu.org
> Date: Fri, 16 May 2008 15:24:04 -0400
>
> >> >> This side I understand, but what about the other: why should we not
> >> >> check process status in the case where we are not redisplaying?
> >>
> >> > Because Emacs generally looks at process output only when it's idle?
> >>
> >> I don't follow: we're talking about when should
> >> wait_reading_process_output check status_notify.
> >>
> >> So to repeat/rephrase my question: why doesn't
> >> wait_reading_process_output call status_notify when it is passed a zero
> >> do_display?
>
> > Sorry, let me explain my line of thought in more detail: Emacs only
> > does a redisplay when it is idle. Emacs also checks input from
> > subprocesses when it is idle. If we are not in redisplay, it means
> > Emacs is not idle, and so it makes sense not to check for subprocess
> > output at that time.
>
> > Does this make any sense?
>
> But if we're in wait_reading_process_output, that means that idle or
> not, we're checking for process output, so why not check for process
> status changes as well?
Because status_notify has a side effect of triggering redisplay.
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: bug#141: Process sentinel not called in batch mode
2008-05-16 19:24 ` Stefan Monnier
2008-05-16 20:07 ` Eli Zaretskii
@ 2008-05-16 20:58 ` David Kastrup
1 sibling, 0 replies; 19+ messages in thread
From: David Kastrup @ 2008-05-16 20:58 UTC (permalink / raw
To: Stefan Monnier
Cc: 141, rms, cyd, eller.helmut, emacs-devel, Eli Zaretskii,
bug-submit-list, bug-gnu-emacs
Stefan Monnier <monnier@iro.umontreal.ca> writes:
> But if we're in wait_reading_process_output, that means that idle or
> not, we're checking for process output, so why not check for process
> status changes as well?
Because we want to have all process output processed before registering
that the process has finished?
--
David Kastrup, Kriemhildstr. 15, 44793 Bochum
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: bug#141: Process sentinel not called in batch mode
2008-05-16 20:07 ` Eli Zaretskii
@ 2008-05-18 3:45 ` Stefan Monnier
2008-05-19 3:00 ` Chong Yidong
0 siblings, 1 reply; 19+ messages in thread
From: Stefan Monnier @ 2008-05-18 3:45 UTC (permalink / raw
To: Eli Zaretskii
Cc: 141, rms, cyd, eller.helmut, emacs-devel, bug-submit-list,
bug-gnu-emacs
>> >> >> This side I understand, but what about the other: why should we not
>> >> >> check process status in the case where we are not redisplaying?
>> >>
>> >> > Because Emacs generally looks at process output only when it's idle?
>> >>
>> >> I don't follow: we're talking about when should
>> >> wait_reading_process_output check status_notify.
>> >>
>> >> So to repeat/rephrase my question: why doesn't
>> >> wait_reading_process_output call status_notify when it is passed a zero
>> >> do_display?
>>
>> > Sorry, let me explain my line of thought in more detail: Emacs only
>> > does a redisplay when it is idle. Emacs also checks input from
>> > subprocesses when it is idle. If we are not in redisplay, it means
>> > Emacs is not idle, and so it makes sense not to check for subprocess
>> > output at that time.
>>
>> > Does this make any sense?
>>
>> But if we're in wait_reading_process_output, that means that idle or
>> not, we're checking for process output, so why not check for process
>> status changes as well?
> Because status_notify has a side effect of triggering redisplay.
Thanks. Now it makes a lot more sense. Please add a corresponding
comment on the do_display check.
Stefan
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: bug#141: Process sentinel not called in batch mode
2008-05-18 3:45 ` Stefan Monnier
@ 2008-05-19 3:00 ` Chong Yidong
2008-05-19 8:24 ` Stefan Monnier
0 siblings, 1 reply; 19+ messages in thread
From: Chong Yidong @ 2008-05-19 3:00 UTC (permalink / raw
To: Stefan Monnier
Cc: 141, rms, bug-gnu-emacs, eller.helmut, emacs-devel, Eli Zaretskii,
bug-submit-list
Stefan Monnier <monnier@iro.umontreal.ca> writes:
>>> But if we're in wait_reading_process_output, that means that idle or
>>> not, we're checking for process output, so why not check for process
>>> status changes as well?
>
>> Because status_notify has a side effect of triggering redisplay.
>
> Thanks. Now it makes a lot more sense. Please add a corresponding
> comment on the do_display check.
What do you think should be the fix for the original problem?
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: bug#141: Process sentinel not called in batch mode
2008-05-19 3:00 ` Chong Yidong
@ 2008-05-19 8:24 ` Stefan Monnier
2008-05-19 16:26 ` Chong Yidong
0 siblings, 1 reply; 19+ messages in thread
From: Stefan Monnier @ 2008-05-19 8:24 UTC (permalink / raw
To: Chong Yidong
Cc: 141, rms, bug-gnu-emacs, eller.helmut, emacs-devel, Eli Zaretskii,
bug-submit-list
>>>> But if we're in wait_reading_process_output, that means that idle or
>>>> not, we're checking for process output, so why not check for process
>>>> status changes as well?
>>
>>> Because status_notify has a side effect of triggering redisplay.
>>
>> Thanks. Now it makes a lot more sense. Please add a corresponding
>> comment on the do_display check.
> What do you think should be the fix for the original problem?
The one you proposed seems right,
Stefan
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: bug#141: Process sentinel not called in batch mode
2008-05-19 8:24 ` Stefan Monnier
@ 2008-05-19 16:26 ` Chong Yidong
2008-04-15 14:48 ` Helmut Eller
0 siblings, 1 reply; 19+ messages in thread
From: Chong Yidong @ 2008-05-19 16:26 UTC (permalink / raw
To: Stefan Monnier; +Cc: 141-done, Eli Zaretskii, eller.helmut, rms, emacs-devel
Stefan Monnier <monnier@iro.umontreal.ca> writes:
>>>>> But if we're in wait_reading_process_output, that means that idle or
>>>>> not, we're checking for process output, so why not check for process
>>>>> status changes as well?
>>>
>>>> Because status_notify has a side effect of triggering redisplay.
>>>
>>> Thanks. Now it makes a lot more sense. Please add a corresponding
>>> comment on the do_display check.
>
>> What do you think should be the fix for the original problem?
>
> The one you proposed seems right,
OK. I've checked it in.
^ permalink raw reply [flat|nested] 19+ messages in thread
* bug#141: marked as done (Process sentinel not called in batch mode)
2008-04-15 14:48 ` Helmut Eller
@ 2008-05-19 16:40 ` Emacs bug Tracking System
0 siblings, 0 replies; 19+ messages in thread
From: Emacs bug Tracking System @ 2008-05-19 16:40 UTC (permalink / raw
To: Chong Yidong
[-- Attachment #1: Type: text/plain, Size: 856 bytes --]
Your message dated Mon, 19 May 2008 12:26:36 -0400
with message-id <873aoe5kg3.fsf@stupidchicken.com>
and subject line Re: bug#141: Process sentinel not called in batch mode
has caused the Emacs bug report #141,
regarding Process sentinel not called in batch mode
to be marked as done.
This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
bug report if necessary, and/or fix the problem forthwith.
(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact don@donarmstrong.com
immediately.)
--
141: http://emacsbugs.donarmstrong.com/cgi-bin/bugreport.cgi?bug=141
Emacs Bug Tracking System
Contact don@donarmstrong.com with problems
[-- Attachment #2: Type: message/rfc822, Size: 9668 bytes --]
From: Helmut Eller <eller.helmut@gmail.com>
To: bug-gnu-emacs@gnu.org
Subject: Process sentinel not called in batch mode
Date: Tue, 15 Apr 2008 16:48:00 +0200
Message-ID: <m2r6d7uqcf.fsf@gmail.com>
process-sentinels aren't called in batch mode. I'm not sure if this is
a bug or the expected behavior, but I find this quite frustrating.
To reproduce the problem do:
$shell> cat test-sentinel.el
(defvar sentinel-called nil)
(defun start-subprocess ()
(let ((proc (start-process "test" nil "bash" "-c" "sleep 1 ; exit 20")))
(set-process-sentinel proc (lambda (proc msg)
(message "sentinel: %S %s" proc msg)
(setq sentinel-called t)))
proc))
(defun print-status (proc)
(message "%s status: %s exit-status: %s sentinel-called: %s"
proc (process-status proc) (process-exit-status proc)
sentinel-called))
(defun main ()
(let ((proc (start-subprocess)))
(while (not sentinel-called)
(print-status proc)
(sit-for 1)
(accept-process-output proc 1))
(print-status proc)))
(main)
$shell> emacs -Q -batch -l test-sentinel.el
test status: run exit-status: 0 sentinel-called: nil
test status: exit exit-status: 20 sentinel-called: nil
test status: exit exit-status: 20 sentinel-called: nil
test status: exit exit-status: 20 sentinel-called: nil
test status: exit exit-status: 20 sentinel-called: nil
[Exit 130 (SIGINT)]
$shell>
Emacs can obviously detect that the suprocess has terminated but the
sentinel is never called. This used to work with Emacs 20.7 and for
certain variants of the 22.0.50 series.
Helmut.
In GNU Emacs 23.0.60.8 (i686-pc-linux-gnu, GTK+ Version 2.8.20)
of 2008-03-14 on xaital
Windowing system distributor `The X.Org Foundation', version 11.0.70101000
configured using `configure '--with-jpeg=no' '--with-gif=no' '--with-tiff=no' '--with-xft' '--without-dbus' '--without-sound''
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: nil
value of $XMODIFIERS: nil
locale-coding-system: nil
default-enable-multibyte-characters: nil
Major mode: Emacs-Lisp
Minor modes in effect:
outline-minor-mode: t
display-time-mode: t
show-paren-mode: t
mouse-wheel-mode: t
file-name-shadow-mode: t
global-font-lock-mode: t
font-lock-mode: t
global-auto-composition-mode: t
auto-compression-mode: t
line-number-mode: t
transient-mark-mode: t
Recent input:
<up> <up> <up> <down> <down> <up> <up> <up> <up> <up>
<up> <up> <down> <down> <right> <right> <right> <right>
<right> <right> <right> <right> <right> <right> <right>
<right> <right> <right> <right> <left> <left> <left>
<left> <left> <left> C-d C-M-x C-x C-s <down> C-e <down>
<down> <up> C-x C-e <down> <down> <down> <down> <down>
<down> <down> <down> <down> <down> <down> <down> <down>
<down> C-x C-e C-x b * M e <tab> <return> <up> <up>
<up> <up> <up> <up> <up> <up> <up> <up> <up> C-x b
<return> <up> <up> <up> <up> <up> <up> <up> <up> <up>
<up> <up> <up> <down> <down> <down> <down> <down> <down>
<down> <down> <down> <down> <down> <down> C-a C-d C-d
C-d <up> <up> <up> <up> C-e <down> <down> C-e C-x C-s
<down> <down> C-x C-s <up> <up> <up> <up> <up> <up>
<up> <up> <up> <up> <up> <up> <up> <up> <up> <down>
<down> <down> <down> <down> <down> <down> <down> <down>
<down> <down> <down> <up> <down> <down> <down> <down>
<down> <down> <up> <up> C-x C-e <up> <up> <up> <up>
<up> <up> <up> <up> <up> <up> <up> <up> <up> <up> <up>
<up> <up> <up> <right> <right> <right> <right> <right>
<right> <right> <right> <right> <right> <right> <right>
<right> <right> <right> <right> <right> <right> <right>
<right> <right> <right> <right> <right> <right> <right>
<right> <right> <right> <right> <right> <right> <right>
<right> <right> <right> <right> <right> <right> <right>
<right> <right> <right> <right> <right> s e e <backspace>
<backspace> l e e p 1 SPC ; SPC <left> <left> C-e C-x
C-s <left> <left> <left> <left> <left> <left> <left>
<left> <left> <left> <left> <left> <left> <left> <left>
SPC C-x C-s <left> <left> <left> <left> <left> <left>
<left> <left> <left> <left> <left> <left> <left> <left>
<left> <left> <left> <left> <right> <right> b a C-x
C-s M-x r e p SPC o <tab> SPC t SPC <backspace> r <tab>
<return>
Recent messages:
test status: exit exit-status: 20 sentinel-called: t
"test status: exit exit-status: 20 sentinel-called: t"
Wrote /home/helmut/elisp/test-sentinel.el
(No changes need to be saved)
test status: run exit-status: 0 sentinel-called: t
"test status: run exit-status: 0 sentinel-called: t"
sentinel: #<process test> exited abnormally with code 20
Wrote /home/helmut/elisp/test-sentinel.el [3 times]
Making completion list... [3 times]
[-- Attachment #3: Type: message/rfc822, Size: 2298 bytes --]
From: Chong Yidong <cyd@stupidchicken.com>
To: Stefan Monnier <monnier@iro.umontreal.ca>
Cc: Eli Zaretskii <eliz@gnu.org>, rms@gnu.org, 141-done@emacsbugs.donarmstrong.com, eller.helmut@gmail.com, emacs-devel@gnu.org
Subject: Re: bug#141: Process sentinel not called in batch mode
Date: Mon, 19 May 2008 12:26:36 -0400
Message-ID: <873aoe5kg3.fsf@stupidchicken.com>
Stefan Monnier <monnier@iro.umontreal.ca> writes:
>>>>> But if we're in wait_reading_process_output, that means that idle or
>>>>> not, we're checking for process output, so why not check for process
>>>>> status changes as well?
>>>
>>>> Because status_notify has a side effect of triggering redisplay.
>>>
>>> Thanks. Now it makes a lot more sense. Please add a corresponding
>>> comment on the do_display check.
>
>> What do you think should be the fix for the original problem?
>
> The one you proposed seems right,
OK. I've checked it in.
^ permalink raw reply [flat|nested] 19+ messages in thread
end of thread, other threads:[~2008-05-19 16:40 UTC | newest]
Thread overview: 19+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-05-13 23:28 Process sentinel not called in batch mode Chong Yidong
2008-05-14 14:18 ` Stefan Monnier
2008-05-16 11:32 ` bug#141: " Richard M Stallman
2008-05-16 13:25 ` Stefan Monnier
2008-05-16 14:41 ` Eli Zaretskii
2008-05-16 16:57 ` Stefan Monnier
2008-05-16 17:23 ` Chong Yidong
2008-05-16 19:08 ` Eli Zaretskii
2008-05-16 19:24 ` Stefan Monnier
2008-05-16 20:07 ` Eli Zaretskii
2008-05-18 3:45 ` Stefan Monnier
2008-05-19 3:00 ` Chong Yidong
2008-05-19 8:24 ` Stefan Monnier
2008-05-19 16:26 ` Chong Yidong
2008-04-15 14:48 ` Helmut Eller
2008-05-19 16:40 ` bug#141: marked as done (Process sentinel not called in batch mode) Emacs bug Tracking System
2008-05-16 20:58 ` bug#141: Process sentinel not called in batch mode David Kastrup
2008-05-14 14:18 ` Stefan Monnier
-- strict thread matches above, loose matches on Subject: below --
2008-05-13 23:28 Chong Yidong
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.