* Re: Carbon (macOS) port asks about killing stderr buffer
2017-10-26 10:32 Carbon (macOS) port asks about killing stderr buffer David Edmondson
@ 2017-10-30 13:32 ` David Edmondson
2018-01-31 14:54 ` David Edmondson
2018-08-09 20:54 ` [PATCH v1 1/1] emacs: Kill the stderr buffer when an async process completes David Edmondson
2 siblings, 0 replies; 8+ messages in thread
From: David Edmondson @ 2017-10-30 13:32 UTC (permalink / raw)
To: notmuch
On Thursday, 2017-10-26 at 12:32:17 +0100, David Edmondson wrote:
> After the changes to use `make-process', the Carbon port of emacs on
> macOS (often referred to as emacs-mac or the railwaycat port) will ask
> about killing the stderr buffer after any `notmuch-search':
>
> Debugger entered--Lisp error: (quit)
> yes-or-no-p("Buffer \" *notmuch-stderr*-839121\" has a running process; kill it? ")
> process-kill-buffer-query-function()
> kill-buffer(#<buffer *notmuch-stderr*-839121>)
> notmuch-start-notmuch-sentinel(#<process notmuch-search> "finished\n")
A hack-and-slash patch for this that works for me:
diff --git a/emacs/notmuch-lib.el b/emacs/notmuch-lib.el
index 010be454..7c0faee4 100644
--- a/emacs/notmuch-lib.el
+++ b/emacs/notmuch-lib.el
@@ -909,7 +909,7 @@ invoke `set-process-sentinel' directly on the returned process,
as that will interfere with the handling of stderr and the exit
status."
- (let (err-file err-buffer proc
+ (let (err-file err-buffer proc err-proc
;; Find notmuch using Emacs' `exec-path'
(command (or (executable-find notmuch-command)
(error "Command not found: %s" notmuch-command))))
@@ -926,11 +926,13 @@ status."
:buffer buffer
:command (cons command args)
:connection-type 'pipe
- :stderr err-buffer))
+ :stderr err-buffer)
+ err-proc (get-buffer-process err-buffer))
(process-put proc 'err-buffer err-buffer)
- ;; Silence "Process NAME stderr finished" in stderr by adding a
- ;; no-op sentinel to the fake stderr process object
- (set-process-sentinel (get-buffer-process err-buffer) #'ignore))
+
+ (process-put err-proc 'err-file err-file)
+ (process-put err-proc 'err-buffer err-buffer)
+ (set-process-sentinel err-proc #'notmuch-start-notmuch-error-sentinel))
;; On Emacs versions before 25, there is no way to capture
;; stdout and stderr separately for asynchronous processes, or
@@ -990,9 +992,14 @@ status."
;; Emacs behaves strangely if an error escapes from a sentinel,
;; so turn errors into messages.
(message "%s" (error-message-string err))))
- (when err-buffer (kill-buffer err-buffer))
(when err-file (ignore-errors (delete-file err-file)))))
+(defun notmuch-start-notmuch-error-sentinel (proc event)
+ (let* ((err-file (process-get proc 'err-file))
+ (err-buffer (or (process-get proc 'err-buffer)
+ (find-file-noselect err-file))))
+ (when err-buffer (kill-buffer err-buffer))))
+
;; This variable is used only buffer local, but it needs to be
;; declared globally first to avoid compiler warnings.
(defvar notmuch-show-process-crypto nil)
dme.
--
Why stay in college? Why go to night school?
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: Carbon (macOS) port asks about killing stderr buffer
2017-10-26 10:32 Carbon (macOS) port asks about killing stderr buffer David Edmondson
2017-10-30 13:32 ` David Edmondson
@ 2018-01-31 14:54 ` David Edmondson
2018-08-09 20:54 ` [PATCH v1 1/1] emacs: Kill the stderr buffer when an async process completes David Edmondson
2 siblings, 0 replies; 8+ messages in thread
From: David Edmondson @ 2018-01-31 14:54 UTC (permalink / raw)
To: notmuch
On Thursday, 2017-10-26 at 12:32:17 +0100, David Edmondson wrote:
> After the changes to use `make-process', the Carbon port of emacs on
> macOS (often referred to as emacs-mac or the railwaycat port) will ask
> about killing the stderr buffer after any `notmuch-search':
>
> Debugger entered--Lisp error: (quit)
> yes-or-no-p("Buffer \" *notmuch-stderr*-839121\" has a running process; kill it? ")
> process-kill-buffer-query-function()
> kill-buffer(#<buffer *notmuch-stderr*-839121>)
> notmuch-start-notmuch-sentinel(#<process notmuch-search> "finished\n")
This happens on the current version of OpenIndiana (a fork of a fork of
a fork of a fork of Solaris) as well when running:
(emacs-version)
"GNU Emacs 25.3.1 (i386-pc-solaris2.11, GTK+ Version 2.24.31)
of 2017-09-12"
> A quick look at the implementation of `make-process' in the Carbon port
> didn't reveal anything obvious to me. This mostly seems like a race -
> whether emacs has decided that the process associated with the stderr
> buffer is dead or not when we call `kill-buffer'. Is any ordering
> guaranteed by the implementation?
>
> I _think_ that have also seen the same problem when asynchronous address
> harvesting is happening for completion on the default NextStep port for
> macOS, but haven't been able to reliably reproduce it.
>
> dme.
> --
> I got a girlfriend that's better than that.
dme.
--
So think of Bob and Judy, they're happy as can be.
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH v1 1/1] emacs: Kill the stderr buffer when an async process completes
2017-10-26 10:32 Carbon (macOS) port asks about killing stderr buffer David Edmondson
2017-10-30 13:32 ` David Edmondson
2018-01-31 14:54 ` David Edmondson
@ 2018-08-09 20:54 ` David Edmondson
2018-08-25 11:59 ` David Edmondson
` (2 more replies)
2 siblings, 3 replies; 8+ messages in thread
From: David Edmondson @ 2018-08-09 20:54 UTC (permalink / raw)
To: notmuch
On some platforms (e.g. macOS), it is necessary to add a real sentinel
process for the error buffer used by `notmuch-start-notmuch' rather
than a no-op sentinel.
---
emacs/notmuch-lib.el | 19 +++++++++++++------
1 file changed, 13 insertions(+), 6 deletions(-)
diff --git a/emacs/notmuch-lib.el b/emacs/notmuch-lib.el
index a7e02710..03c966b7 100644
--- a/emacs/notmuch-lib.el
+++ b/emacs/notmuch-lib.el
@@ -909,7 +909,7 @@ invoke `set-process-sentinel' directly on the returned process,
as that will interfere with the handling of stderr and the exit
status."
- (let (err-file err-buffer proc
+ (let (err-file err-buffer proc err-proc
;; Find notmuch using Emacs' `exec-path'
(command (or (executable-find notmuch-command)
(error "Command not found: %s" notmuch-command))))
@@ -926,11 +926,13 @@ status."
:buffer buffer
:command (cons command args)
:connection-type 'pipe
- :stderr err-buffer))
+ :stderr err-buffer)
+ err-proc (get-buffer-process err-buffer))
(process-put proc 'err-buffer err-buffer)
- ;; Silence "Process NAME stderr finished" in stderr by adding a
- ;; no-op sentinel to the fake stderr process object
- (set-process-sentinel (get-buffer-process err-buffer) #'ignore))
+
+ (process-put err-proc 'err-file err-file)
+ (process-put err-proc 'err-buffer err-buffer)
+ (set-process-sentinel err-proc #'notmuch-start-notmuch-error-sentinel))
;; On Emacs versions before 25, there is no way to capture
;; stdout and stderr separately for asynchronous processes, or
@@ -990,9 +992,14 @@ status."
;; Emacs behaves strangely if an error escapes from a sentinel,
;; so turn errors into messages.
(message "%s" (error-message-string err))))
- (when err-buffer (kill-buffer err-buffer))
(when err-file (ignore-errors (delete-file err-file)))))
+(defun notmuch-start-notmuch-error-sentinel (proc event)
+ (let* ((err-file (process-get proc 'err-file))
+ (err-buffer (or (process-get proc 'err-buffer)
+ (find-file-noselect err-file))))
+ (when err-buffer (kill-buffer err-buffer))))
+
;; This variable is used only buffer local, but it needs to be
;; declared globally first to avoid compiler warnings.
(defvar notmuch-show-process-crypto nil)
--
2.17.1 (Apple Git-112)
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH v1 1/1] emacs: Kill the stderr buffer when an async process completes
2018-08-09 20:54 ` [PATCH v1 1/1] emacs: Kill the stderr buffer when an async process completes David Edmondson
@ 2018-08-25 11:59 ` David Edmondson
2018-08-25 14:27 ` Sebastian Schwarz
2018-08-26 11:30 ` David Bremner
2 siblings, 0 replies; 8+ messages in thread
From: David Edmondson @ 2018-08-25 11:59 UTC (permalink / raw)
To: notmuch
This failure mode is very annoying. Could I persuade someone to review
the proposed change?
On Thursday, 2018-08-09 at 21:54:34 +01, David Edmondson wrote:
> On some platforms (e.g. macOS), it is necessary to add a real sentinel
> process for the error buffer used by `notmuch-start-notmuch' rather
> than a no-op sentinel.
> ---
> emacs/notmuch-lib.el | 19 +++++++++++++------
> 1 file changed, 13 insertions(+), 6 deletions(-)
>
> diff --git a/emacs/notmuch-lib.el b/emacs/notmuch-lib.el
> index a7e02710..03c966b7 100644
> --- a/emacs/notmuch-lib.el
> +++ b/emacs/notmuch-lib.el
> @@ -909,7 +909,7 @@ invoke `set-process-sentinel' directly on the returned process,
> as that will interfere with the handling of stderr and the exit
> status."
>
> - (let (err-file err-buffer proc
> + (let (err-file err-buffer proc err-proc
> ;; Find notmuch using Emacs' `exec-path'
> (command (or (executable-find notmuch-command)
> (error "Command not found: %s" notmuch-command))))
> @@ -926,11 +926,13 @@ status."
> :buffer buffer
> :command (cons command args)
> :connection-type 'pipe
> - :stderr err-buffer))
> + :stderr err-buffer)
> + err-proc (get-buffer-process err-buffer))
> (process-put proc 'err-buffer err-buffer)
> - ;; Silence "Process NAME stderr finished" in stderr by adding a
> - ;; no-op sentinel to the fake stderr process object
> - (set-process-sentinel (get-buffer-process err-buffer) #'ignore))
> +
> + (process-put err-proc 'err-file err-file)
> + (process-put err-proc 'err-buffer err-buffer)
> + (set-process-sentinel err-proc #'notmuch-start-notmuch-error-sentinel))
>
> ;; On Emacs versions before 25, there is no way to capture
> ;; stdout and stderr separately for asynchronous processes, or
> @@ -990,9 +992,14 @@ status."
> ;; Emacs behaves strangely if an error escapes from a sentinel,
> ;; so turn errors into messages.
> (message "%s" (error-message-string err))))
> - (when err-buffer (kill-buffer err-buffer))
> (when err-file (ignore-errors (delete-file err-file)))))
>
> +(defun notmuch-start-notmuch-error-sentinel (proc event)
> + (let* ((err-file (process-get proc 'err-file))
> + (err-buffer (or (process-get proc 'err-buffer)
> + (find-file-noselect err-file))))
> + (when err-buffer (kill-buffer err-buffer))))
> +
> ;; This variable is used only buffer local, but it needs to be
> ;; declared globally first to avoid compiler warnings.
> (defvar notmuch-show-process-crypto nil)
> --
> 2.17.1 (Apple Git-112)
dme.
--
In heaven there is no beer, that's why we drink it here.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v1 1/1] emacs: Kill the stderr buffer when an async process completes
2018-08-09 20:54 ` [PATCH v1 1/1] emacs: Kill the stderr buffer when an async process completes David Edmondson
2018-08-25 11:59 ` David Edmondson
@ 2018-08-25 14:27 ` Sebastian Schwarz
2018-08-26 11:30 ` David Bremner
2 siblings, 0 replies; 8+ messages in thread
From: Sebastian Schwarz @ 2018-08-25 14:27 UTC (permalink / raw)
To: notmuch
On 2017-10-26, David Edmondson wrote:
> After the changes to use `make-process', the Carbon port of emacs on
> macOS (often referred to as emacs-mac or the railwaycat port) will ask
> about killing the stderr buffer after any `notmuch-search':
>
> Debugger entered--Lisp error: (quit)
> yes-or-no-p("Buffer \" *notmuch-stderr*-839121\" has a running process; kill it? ")
> process-kill-buffer-query-function()
> kill-buffer(#<buffer *notmuch-stderr*-839121>)
> notmuch-start-notmuch-sentinel(#<process notmuch-search> "finished\n")
I see the same prompt whenever I call the function
notmuch-refresh-all-buffers on Ubuntu 18.04, which has GNU Emacs
25.2 and notmuch 0.26.
On 2018-08-09, David Edmondson wrote:
> On some platforms (e.g. macOS), it is necessary to add a real sentinel
> process for the error buffer used by `notmuch-start-notmuch' rather
> than a no-op sentinel.
Applying your patch fixes this for me there.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v1 1/1] emacs: Kill the stderr buffer when an async process completes
2018-08-09 20:54 ` [PATCH v1 1/1] emacs: Kill the stderr buffer when an async process completes David Edmondson
2018-08-25 11:59 ` David Edmondson
2018-08-25 14:27 ` Sebastian Schwarz
@ 2018-08-26 11:30 ` David Bremner
2018-08-26 21:16 ` David Edmondson
2 siblings, 1 reply; 8+ messages in thread
From: David Bremner @ 2018-08-26 11:30 UTC (permalink / raw)
To: David Edmondson, notmuch
David Edmondson <dme@dme.org> writes:
>
> +(defun notmuch-start-notmuch-error-sentinel (proc event)
> + (let* ((err-file (process-get proc 'err-file))
> + (err-buffer (or (process-get proc 'err-buffer)
> + (find-file-noselect err-file))))
Is the second case here (find-file-noselect) for the non-make-process
code path, or something else? It might help to have a comment.
> + (when err-buffer (kill-buffer err-buffer))))
> +
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v1 1/1] emacs: Kill the stderr buffer when an async process completes
2018-08-26 11:30 ` David Bremner
@ 2018-08-26 21:16 ` David Edmondson
0 siblings, 0 replies; 8+ messages in thread
From: David Edmondson @ 2018-08-26 21:16 UTC (permalink / raw)
To: David Bremner, notmuch
On Sunday, 2018-08-26 at 08:30:41 -03, David Bremner wrote:
> David Edmondson <dme@dme.org> writes:
>>
>> +(defun notmuch-start-notmuch-error-sentinel (proc event)
>> + (let* ((err-file (process-get proc 'err-file))
>> + (err-buffer (or (process-get proc 'err-buffer)
>> + (find-file-noselect err-file))))
> Is the second case here (find-file-noselect) for the non-make-process
> code path, or something else? It might help to have a comment.
For non-make-process. Updated patch sent.
>> + (when err-buffer (kill-buffer err-buffer))))
>> +
dme.
--
I'm not the reason you're looking for redemption.
^ permalink raw reply [flat|nested] 8+ messages in thread