[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