[PATCH] test/emacs: replace the use of process-attributes with signal-process
Tomi Ollila
tomi.ollila at iki.fi
Sat Jan 11 10:50:00 PST 2014
On Sat, Jan 11 2014, David Bremner <david at tethera.net> wrote:
> In some environments (at least Hurd), process-attributes is
> unimplimented and always returns nil. This ends up causing test
> failures (see e.g. id:87a9ffofsc.fsf at zancas.localnet).
>
> Historically and according to POSIX 1003.1-2001, a signal of 0 can be
> used to check the validity of a pid. This seems less heinous than
> parsing the output of ps(1).
> ---
>
> Thanks to Domo for the simpler solution. Now that I think about it,
> perhaps this makes sense as a debian only update, since it currently
> fails only on Debian/Hurd, which according to the GNU project is the
> only "working distribution
Would an ultimate(tm) solution be:
(defun orphan-watchdog (pid)
"Initiate orphan watchdog check."
(run-at-time 60 60
(if (process-attributes pid)
(lambda (pid) (if (not (process-attributes pid) (kill-emacs))))
(lambda (pid) (if (/= 0 (signal-process pid 0)) (kill-emacs))))
pid))
of course the lambdas can be replaced w/ symbols to functions, just
compressed for this example -- also w/ appropriate commit messages...
This could work on unices, hurd, windows, whatnot...
Anyway, the current patch also LGTM.
Tomi
>
> test/test-lib.el | 15 +++++++++------
> 1 file changed, 9 insertions(+), 6 deletions(-)
>
> diff --git a/test/test-lib.el b/test/test-lib.el
> index d26b49f..37fcb3d 100644
> --- a/test/test-lib.el
> +++ b/test/test-lib.el
> @@ -77,19 +77,22 @@ invisible text."
> (setq start next-pos)))
> str))
>
> +;; process-attributes is not defined everywhere, so define an
> +;; alternate way to test if a process still exists.
> +
> +(defun test-process-running (pid)
> + (= 0
> + (signal-process pid 0)))
> +
> (defun orphan-watchdog-check (pid)
> "Periodically check that the process with id PID is still
> running, quit if it terminated."
> - (if (not (process-attributes pid))
> + (if (not (test-process-running pid))
> (kill-emacs)))
>
> (defun orphan-watchdog (pid)
> "Initiate orphan watchdog check."
> - ; If process-attributes returns nil right away, that probably means
> - ; it is unimplimented. So we delay two minutes before killing emacs.
Btw: who let this typo above pass through review ? ;)
> - (if (process-attributes pid)
> - (run-at-time 60 60 'orphan-watchdog-check pid)
> - (run-at-time 120 60 'orphan-watchdog-check pid)))
> + (run-at-time 60 60 'orphan-watchdog-check pid))
>
> (defun hook-counter (hook)
> "Count how many times a hook is called. Increments
> --
> 1.8.5.2
More information about the notmuch
mailing list